Ответ 1
Вы не получаете экран выбора нескольких пользователей из-за следующего параметра: authuser=0
Это автоматически выбирает первую учетную запись, с которой вы выполняете вход (authuser=1
будет выбирать второй и т.д.).
В настоящее время невозможно удалить этот параметр с помощью клиентской библиотеки, потому что клиентская библиотека автоматически устанавливает его в 0 (именно поэтому он утверждает, что не обрабатывает мультисчета), если нет значения, поэтому один из способов - переопределить его -1, например, это покажет выбор с несколькими учетными записями. Затем вы также можете обратиться к профилю пользователя или по электронной почте одновременно с запросом доступа к другим API-интерфейсам и получить либо электронное письмо пользователя, либо его идентификатор. Затем на последующем auth вы можете указать параметр user_id
, который будет обходить экран выбора пользователя.
Итак, на практике сначала авторизуйтесь следующим образом:
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});
Единственная проблема с вышеизложенным заключается в том, что автоматическое обновление клиентской библиотеки не будет работать, потому что каждый auth будет заблокирован на экране выбора нескольких учетных записей.
Хитрость заключается в том, чтобы получить идентификатор пользователя с помощью API UserInfo, сохранить этот идентификатор в cookie сеанса и использовать его при последующем авторизации следующим образом:
gapi.auth.authorize({client_id: <Your Client ID>,
scope: 'https://www.googleapis.com/auth/drive openid',
user_id: <The User ID>,
authuser: -1});
Указание идентификатора пользователя гарантирует, что выборки с несколькими учетными записями будет обходить и позволит автоматически обновить токен из клиентской библиотеки, чтобы снова работать.
Для справки другой параметр URL, влияющий на поток пользователя:
-
user_id
: аналогичноauthuser
(обходит экран выбора нескольких учетных записей), но вы можете использовать адрес электронной почты (например, [email protected]) или идентификатор пользователя, полученный из нашей конечной точки Open ID Connect/API Google +/UserInfo API -
approval_prompt
: по умолчаниюauto
, можно установить значениеforce
, чтобы убедиться, что экран подтверждения/предоставления показан. Это гарантирует, что экран gant не будет обходить при последующем auth (после первого раза). -
immediate
:immediate
немного сложнее, если он установлен наtrue
, он обходит экран предоставления (вродеapproval_prompt=auto
), если пользователь уже предоставил разрешение ранее, но если пользователь не предоставил разрешение ранее вы получите перенаправление с ошибкой:error=immediate_failed
. Если установлено значениеfalse
, оно не добавит специального поведения и, следовательно, отменит настройку поведения значениемapproval_prompt
.
Примечание: immediate=true
и approval_prompt=force
являются недопустимой комбинацией.
Я думаю, что клиентская библиотека использует параметр immediate
, так что если он получит error=immediate_failed
, он перезапустит поток auth без параметра authuser
, но это только предположения:)