Czy możliwe jest prawidłowe wybranie dowolnego dostępnego konta Google, z którego można korzystać podczas autoryzacji za pośrednictwem biblioteki klienta JS dla dysku?
Mam istniejącą aplikację z obsługą Dysku Google, która korzysta z biblioteki Klientów Google Java i Auth Server flow.
Jeśli nie jesteś zalogowany do aplikacji i przejdź do adresu URL i zalogowałeś się na więcej niż jedno konto google w tej przeglądarce (możliwe jest tylko jedno osobiste konto Google, wszelkie dodatkowe muszą być konta Google business) callback OAuth oferuje opcje wyboru konta Google, z którego chcesz korzystać.
Jednakże, podczas testowania przełącznika na korzystanie z biblioteki klienta JavaScript nie jestem w stanie aktywować ekranu wyboru wielu kont za pomocą gapi.auth./ align = "left" / Czy możliwa jest obsługa wielu kont za pomocą biblioteki JS?
Aktualizacja: próbowałem z parametrem immediate
false
. Mogę się zalogować, o ile nie zmienię konta w wyskakującym okienku. Jeśli zmienię konto, dostaję do:
W nowej karcie i nic się nie dzieje. Zrobiłem wideo, aby zademonstrować .
Update 2: ten błąd przeciwko bibliotece klienta JS dla potrzeby podwójnego wyboru konta multitple został zaakceptowany.
4 answers
Nie otrzymasz ekranu wyboru wielu użytkowników z powodu następującego parametru: authuser=0
To automatycznie wybiera pierwsze konto, z którego jesteś zalogowany (authuser=1
wybierze drugie itd...).
Obecnie nie jest możliwe usunięcie tego param przy użyciu biblioteki klienta, ponieważ Biblioteka klienta ustawia ją automatycznie na 0 (dlatego twierdzi, że nie obsługuje wielu kont) jeśli nie ma wartości, więc jednym ze sposobów jest zastąpienie jej na przykład -1, to pokaże wybór wielu kont. Następnie możesz również poprosić o dostęp do profilu użytkownika lub e-maila w tym samym czasie poprosić o dostęp do innych interfejsów API i pobrać adres e-mail użytkownika lub jego identyfikator. Następnie przy kolejnym auth możesz określić user_id
param, który ominie ekran wyboru użytkownika.
Więc w praktyce najpierw Autoryzuj 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ższym polega na tym, że automatyczne odświeżanie biblioteki klienta nie będzie działać, ponieważ każdy auth zostanie zablokowany na ekranie wyboru wielu kont.
Aby uzyskać identyfikator użytkownika korzystającego z API UserInfo, należy zapisać ten identyfikator w pliku cookie sesji i użyć go na kolejnych auth w ten sposób:]}gapi.auth.authorize({client_id: <Your Client ID>,
scope: 'https://www.googleapis.com/auth/drive openid',
user_id: <The User ID>,
authuser: -1});
Podanie identyfikatora użytkownika upewni się, że wybór wielu kont jest bypass i pozwoli na ponowne automatyczne odświeżenie tokena z lib klienta.
Dla odniesienia, inne param URL, które mają wpływ na przepływ użytkownika są:
-
user_id
: podobne doauthuser
(obejścia ekran wyboru wielu kont), ale możesz użyć adresu e-mail (np. [email protected] 100%) lub identyfikator użytkownika uzyskany z naszego Open ID Connect endpoint / Google + API / UserInfo API -
approval_prompt
: domyślną wartością jestauto
, można ją ustawić naforce
, aby upewnić się, że ekran zatwierdzenia/przyznania zostanie wyświetlony. Zapewnia to, że ekran gant nie jest pomijany przy kolejnym auth (po pierwszym czasie). -
immediate
:immediate
jest to trochę trudne, gdy ustawione na {[12] } ominie ekran dotacji (trochę jakapproval_prompt=auto
), jeśli użytkownik udzielił już wcześniej zgody, ale jeśli użytkownik nie udzielił wcześniej zgody, zostanie przekierowany z błędem:error=immediate_failed
. Jeśli zostanie ustawione nafalse
, nie będzie dodawać specjalnego zachowania, a tym samym będzie zastępować zachowanie ustawione przez wartośćapproval_prompt
.
Uwaga: immediate=true
i approval_prompt=force
jest nieprawidłową kombinacją.
Myślę, że biblioteka klienta używa immediate
param, więc jeśli dostanie error=immediate_failed
to uruchomi ponownie przepływ auth bez authuser
param, ale to tylko spekulacje:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-23 15:48:35
Strona OAuth grant access jest wyświetlana tylko wtedy, gdy nie jest w trybie natychmiastowym, czy działa zgodnie z oczekiwaniami, jeśli ustawisz parametr immediate
Na false?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-13 18:15:35
Zgodnie z http://code.google.com/p/google-api-javascript-client/issues/detail?id=11 wiele logowań nie jest obsługiwanych przez Klienta Javascript
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-14 17:04:20
Zwróć uwagę na parametr authuser . Ustaw na przykład wartość "2", a zostaniesz poproszony o zalogowanie się, nawet jeśli jesteś już uwierzytelniony.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-10 21:07:01