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:

Https://accounts.google.com/o/oauth2/auth?client_id=433863057149.apps.googleusercontent.com&scope=https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/drive.install+https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile&immediate=false&redirect_uri=postmessage&origin=https://drivedrawio.appspot.com&proxy=oauth2relay593063763&response_type=token&state=701344514&authuser=1

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.

Author: Thomas the Tank Engine, 2012-11-13

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 do authuser (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ą jest auto, można ją ustawić na force, 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ę jak approval_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 na false, 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:)

 44
Author: Nicolas Garnier,
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?

 3
Author: Claudio Cherubino,
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

 3
Author: pinoyyid,
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.

 0
Author: AlexG,
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