次のパラメータが原因で、マルチユーザー選択画面が表示されません。authuser=0
これにより、サインインしている最初のアカウントが自動的に選択されます(authuser=1
2番目のアカウントなどが選択されます)。
値がない場合、クライアントライブラリは自動的に0に設定するため(これがマルチアカウントを処理しないと主張する理由です)、クライアントライブラリを使用してそのパラメータを削除することは現在できません。そのため、1つの方法はそれを-1にオーバーライドすることです。たとえば、これはマルチアカウントチューザーを表示します。次に、他のAPIへのアクセスを要求し、ユーザーの電子メールまたはそのIDのいずれかを取得すると同時に、ユーザーのプロファイルまたは電子メールへのアクセスを要求することもできます。その後の認証で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});
上記の唯一の問題は、マルチアカウント選択画面ですべての認証がブロックされるため、クライアントライブラリの自動更新が機能しないことです。
秘訣は、UserInfo APIを使用してユーザーのIDを取得し、そのIDをセッションCookieに保存して、次のような後続の認証で使用することです。
gapi.auth.authorize({client_id: <Your Client ID>,
scope: 'https://www.googleapis.com/auth/drive openid',
user_id: <The User ID>,
authuser: -1});
ユーザーのIDを指定すると、マルチアカウントチューザーがバイパスされ、クライアントライブラリからのトークンの自動更新が再び機能するようになります。
参考までに、ユーザーフローに影響を与える他のURLパラメータは次のとおりです。
user_id
:(authuser
マルチアカウント選択画面をバイパスする)と同様ですが、メールアドレス(例:bob@gmail.com)またはOpenIDConnectエンドポイント/Google+API /UserInfoAPIから取得したユーザーIDを使用できます
approval_prompt
:デフォルトは、承認/付与画面が確実に表示auto
されるように設定できます。force
これにより、ガント画面が後続の認証でバイパスされないようになります(初回以降)。
immediate
:immediate
は少し注意が必要です。設定すると、ユーザーが以前に承認を付与した場合true
は付与画面(のようなものapproval_prompt=auto
)をバイパスしますが、ユーザーが以前に承認を付与していない場合は、次のエラーでリダイレクトされますerror=immediate_failed
。これに設定するfalse
と、特別な動作は追加されないため、値によって動作設定にフォールバックしapproval_prompt
ます。
注:immediate=true
とapproval_prompt=force
は無効な組み合わせです。
クライアントライブラリはパラメータを使用していると思います。そのimmediate
ため、彼がパラメータを取得するerror=immediate_failed
と、パラメータなしで認証フローが再開されますが、それはauthuser
推測にすぎません:)