16

アプリケーションには次のワークフローがあります。

  1. ユーザーがカスタム アプリにログインする
  2. ユーザーがボタンをクリックして YouTube アカウントをリンクする
  3. アプリケーションは、以下のコード リストを使用してサーバー側の要求を行います
  4. ユーザーは 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()
}
4

2 に答える 2