当前位置: 首页 > 知识库问答 >
问题:

强制用户通过Google OAuth2选择帐户

欧阳声
2023-03-14

我的应用程序中有以下工作流:

  1. 用户登录我的自定义应用程序
  2. 用户点击一个按钮链接他们的YouTube帐户
  3. 应用程序使用下面的代码列表发出服务器端请求
  4. 用户被重定向到google auth url

此时,发生了两件事之一:

[我从来不想要这种行为] - 如果用户只登录了一个谷歌帐户(即mail,谷歌域名应用套件等),则永远不会要求用户选择要链接的帐户。它只是假设他们想要使用他们登录的那个,并继续其快乐的方式。

[我总是想要这种行为] - 如果用户没有登录到任何Google帐户,或者他们登录到多个Google帐户,那么系统会要求他们选择他们想要继续使用的帐户。

问:我有没有办法强制用户选择一个帐户,即使用户当前登录到单个Google帐户?

法典:

scala prettyprint-override">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()
}

共有2个答案

乌翰学
2023-03-14

在第一条评论中,@Hans给出了类似主题的正确链接。但是,如果没有帮助,那么这里有解决方案:

只需添加<代码>

左翰海
2023-03-14

我认为你可以在url中添加一些参数,告诉谷歌显示用户帐户的同意屏幕,而不是采用默认的谷歌帐户。

这可以通过在url中添加提示=select_account同意 (" " 作为url编码的一部分添加)来完成。

我没有尝试这个,直到现在,但也许你可以尝试。

 类似资料:
  • 有没有办法,我可以强制谷歌帐户选择器显示,即使用户只用一个帐户登录。 我已尝试重定向到此 URL: 它似乎有效,但我不知道是否有任何其他条件可能会失败。

  • 所以我已经在我的React应用中使用AWS Amplify (federatedSignIn)实现了Google认证。显然,我想让谷歌帐户选择器屏幕强制用户选择一个帐户登录。显然,它只有在有多个谷歌账户可供选择时才起作用,但如果只有一个账户,系统会自动使用它登录? 如何在只有一个帐户的情况下强制执行选择屏幕?

  • 我目前使用Cognito用户池,作为身份提供者与Google联合,来处理我的web应用程序的用户登录。目前,我只使用谷歌实现了登录。这目前是通过Cognito的托管用户界面来完成的。 当用户使用Google登录时,我希望始终提示他们选择他们的帐户,即显示此提示。 但是,我发现当我仅使用一个Google帐户登录时,会跳过此屏幕。虽然,当我没有登录Google帐户/2个或更多Google帐户时,会显示

  • 我必须实现一个JTable,其中必须恰好选择一行(总是)。不允许空选择。我正在初始化期间选择第一行: 另外,我在用 但用户仍然可以使用CLick+Ctrl取消选择一行。 最简单的方法是什么,确保在表中总是选择一行?

  • 我正在使用谷歌Picker Api访问谷歌驱动器文件,工作正常。 但在我的浏览器中,如果我已经登录到多个Gmail帐户,它会自动显示一个帐户的驱动器文件。如果我已经登录了多个Gmail帐户,是否有办法显示帐户选择页面。 任何人都可以帮我。

  • 我有一个颜色列表,当点击,它改变了文本的颜色,悬停等在网站上。但当您重新加载或转到另一页时,我选择的颜色不会保存。似乎是使用localStorage完成的,但我不明白如何实现它。站点链接:点击