Nie otrzymujesz ekran wyboru użytkownika wielofunkcyjnego z powodu następującego parametru: authuser=0
ten automatycznie wybiera pierwsze konto jesteś zalogowany-in (authuser=1
wybierze drugi itd ...).
Obecnie nie można usunąć tego parametru za pomocą biblioteki klienta, ponieważ biblioteka klienta ustawia go automatycznie na 0 (dlatego nie obsługuje wielu kont), jeśli nie ma żadnej wartości, więc jednym ze sposobów jest zastąpienie go do -1 na przykład, to pokaże wybieracz wielu kont. Następnie możesz również poprosić o dostęp do user's profile or email w tym samym czasie, gdy poprosisz o dostęp do innych interfejsów API i pobierzesz wiadomość e-mail od użytkownika lub jej identyfikatora. Następnie przy kolejnym uwierzytelnieniu można określić parametr user_id
, który pominie ekran wyboru użytkownika.
Więc w praktyce, najpierw autoryzować tak:
gapi.auth.authorize({client_id: <Your Client ID>,
scope: 'https://www.googleapis.com/auth/drive openid', // That requires access to Google Drive and to the UserInfo API
authuser: -1});
Jedyny problem z powyższego jest to, że auto-odświeżania biblioteki klienta nie będzie działać, ponieważ każdy auth będzie być zablokowane na multi-konta ekran wyboru.
Sztuką jest, aby uzyskać identyfikator użytkownika za pomocą interfejsu API UserInfo, zapisać ten identyfikator w pliku cookie sesji i używać go na kolejnym auth tak:
gapi.auth.authorize({client_id: <Your Client ID>,
scope: 'https://www.googleapis.com/auth/drive openid',
user_id: <The User ID>,
authuser: -1});
Określanie identyfikator użytkownika będzie upewnić się, że selektor wielu kont jest pomijany i pozwoli na automatyczne ponowne uruchomienie tokena z biblioteki klienta.
Dla porównania, inne param URL, które mają wpływ na przepływ użytkownika są:
user_id
: podobne niż authuser
(omija ekran wyboru multi-konta), ale można korzystać z adresu e-mail (np [email protected]) lub identyfikator użytkownika otrzymany z punktu końcowego Open ID Connect/Google + API/UserInfo API
approval_prompt
: domyślnie jest to auto
, można ustawić na force
, aby upewnić się, że ekran zatwierdzenia/udzielenia zostanie wyświetlony. Zapewnia to, że ekran główny nie zostanie ominięty przy kolejnym uwierzytelnieniu (po pierwszym czasie).
immediate
: immediate
jest nieco kłopotliwe, gdy ustawiono true
będzie ominąć ekran Grant (trochę jak approval_prompt=auto
) jeśli użytkownik już zatwierdziły wcześniej, ale jeśli użytkownik nie przyznało zatwierdzenie wcześniej dostaniesz przekierowany z błędem : error=immediate_failed
. Ustawienie na false
nie spowoduje dodania specjalnego zachowania, a więc powrotu do ustawień zachowania przez wartość approval_prompt
.
Uwaga: immediate=true
i approval_prompt=force
jest nieprawidłową kombinacją.
myślę, że biblioteka klient używa immediate
param tak, że jeśli dostaje error=immediate_failed
będzie ponownie uruchomić przepływ auth bez authuser
param, ale to tylko spekulacje :)
Podczas, gdy technicznie odpowiedziałeś na pytanie "Jak uzyskać monit o to, które konto Google ma być używane podczas korzystania z biblioteki klienta JS na Dysku?", Moje pytanie było w rzeczywistości błędnie zatytułowane, przepraszam :). – David
Właśnie odpowiedziałem, ponieważ wiem lepiej, jak działają nasze punkty końcowe OAuth niż biblioteka klienta JS: D Nie wiedziałem, że nie działa z kontami wielu użytkowników:/ – Nivco
Gdzie znalazłeś ten parametr? Nie można go znaleźć w https://developers.google.com/+/web/api/javascript – chulian