【问题标题】:Cognito + Google + React - signout not working using aws amplifyCognito + Google + React - 注销无法使用 aws amplify
【发布时间】:2022-12-10 02:24:36
【问题描述】:

我可以使用 Reactjs 应用程序中的 aws-amplify 库登录谷歌帐户。

当我注销并尝试再次登录时,它不会要求我提供 google 用户名和密码。它使用上一个会话(以某种方式)并将我重定向回我的反应应用程序。

我阅读了不同的问题并应用了各种解决方案,但没有一个对我有用。

解决方案 1:这显然不适用于谷歌注销。

const logout = () => {

    Auth.signout()
 
}

解决方案 2:

const logout = () => {

  const requestOptions = {
        method: "POST",
        'Content-Type': 'application/x-www-form-urlencoded'
  };

  const url = `https://{domain}.amazoncognito.com/logout?client_id=xxx&response_type=code&scope=xxx&redirect_uri=http://xxx/logout`;

  await fetch(url, requestOptions);
}

但出于某种原因,它引发了 CORS 问题。

  1. 我不知道如何以及在哪里解决 CORS 问题?我需要在 cognito 中配置什么吗?

  2. 尝试使用 method: "GET" 而不是 method: "POST" 但同样的 CORS 问题。

  3. 我不知道这种做法是对还是错。让我知道是否有其他明确的方法。

    需要知道注销和销毁用户会话的正确方法。所以下次我尝试登录时,它必须要求我输入谷歌用户名和密码。

【问题讨论】:

  • 您是否将此解决方案与 API Gateway 或 S3 结合使用?
  • 不,我没有。它是 amplify+react 和 cognito 之间针对 google(外部身份提供者)用户的直接通信。对于 congito 用户(不是外部识别提供者用户),我们有 lambda + api 网关。
  • 尝试允许 API Gateway 中的 cors,因为 Cognito 中没有 cors,所以您的问题似乎来自 API Gateway
  • 我已经在 API 网关中完成了,但没有用。在我的案例中,Google 流程与 lambda 或 api 网关无关。

标签: javascript reactjs amazon-web-services amazon-cognito aws-amplify


【解决方案1】:

Auth.signout() 不会让您退出 Google。因此,即使您退出应用程序,您的 Google 会话仍然存在。

看看this 的回答。

当用户再次尝试登录时,它会将您重定向到 Google,并且存在有效的 Google 会话。这意味着 Google 不会再要求您提供凭据。因此,Google 会将您重定向回 Cognito,然后再转到该应用程序。

这就是为什么您不会在第一种方法中再次看到 Google 登录页面的原因。 尝试这个:

  • 退出应用程序
  • 在同一个浏览器中导航到 gmail 并注销(这将清除 Google 会话。
  • 尝试登录应用程序。然后在这一点上你会被要求重新验证谷歌。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 2021-07-31
    • 2019-04-12
    • 2022-11-27
    • 2019-04-06
    • 2018-12-10
    • 2019-03-04
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多