私のアプリケーションには次のワークフローがあります。
- ユーザーがカスタムアプリにログインする
- ユーザーはボタンをクリックしてYouTubeアカウントをリンクします
- アプリケーションは、以下のコードリストを使用してサーバー側リクエストを作成します。
- ユーザーはGoogle認証URLにリダイレクトされます
この時点で、次の 2 つのいずれかが起こります。
[私一度もないこの動作を望む]- ユーザーが 1 つの Google アカウント (Gmail、Google Apps for Domains など) にログインしている場合、どのアカウントをリンクするかを選択するようユーザーに求められることはありません。ログインしているアカウントを使用するものと想定して、そのまま処理が続行されます。
[私いつもこの動作を望む]- ユーザーがどの Google アカウントにもログインしていない場合、または複数の Google アカウントにログインしている場合は、続行するアカウントを選択するように求められます。
質問:ユーザーが現在 1 つの Google アカウントにログインしている場合でも、ユーザーにアカウントを選択させる方法はありますか?
コード:
private def getFlow() = {
if (flow == null) {
logger.info("Using OAuth client secrets file: " + GoogleOAuthService.CLIENT_SECRETS_JSON)
clientSecrets = GoogleClientSecrets.load(JacksonFactory.getDefaultInstance(),
new InputStreamReader(getClass.getResourceAsStream(GoogleOAuthService.CLIENT_SECRETS_JSON)));
redirectUri = clientSecrets.getDetails().getRedirectUris().get(0)
flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, JacksonFactory.getDefaultInstance(), clientSecrets, SCOPES).setDataStoreFactory(
dataStoreFactory).setAccessType("offline").setApprovalPrompt("force").build()
}
flow
}
def newAuthorizationUrl(userId: String) = {
val urlRequest = getFlow().newAuthorizationUrl()
urlRequest.setAccessType("offline")
.setRedirectUri(redirectUri).setState(userId).build()
}
ベストアンサー1
デフォルトの Google アカウントを想定するのではなく、ユーザー アカウントを含む同意画面を表示するように Google に指示するために、URL にいくつかのパラメータを追加できると思います。
prompt=select_account+consent
これは、URL に (URL エンコードの一部として「+」が追加されます) を追加することで実行できます。
今まで試していませんでしたが、試してみるといいかもしれません。