Cognito + Google + React - 使用 aws amplify 无法注销

mic*_*yks 6 javascript amazon-web-services reactjs amazon-cognito aws-amplify

我可以在 Reactjs 应用程序中使用 aws-amplify 库使用 google 帐户登录。

当我注销并尝试再次登录时,它不会要求我输入谷歌用户名和密码。它使用之前的会话(以某种方式)并将我重定向回我的反应应用程序。

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

解决方案 1:这对于 google 注销显然不起作用。

const logout = () => {

    Auth.signout()
 
}
Run Code Online (Sandbox Code Playgroud)

解决方案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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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


更新

解决方案3:

const logout = () => {

       window.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com"

 }
Run Code Online (Sandbox Code Playgroud)

通过上述方法,它会将我重定向到应用程序的登录页面,但不幸的是,当我再次单击Google Signin按钮时,它不会显示谷歌登录屏幕或不会要求我再次登录。换句话说,它使会话保持活动状态并且不会注销谷歌帐户。

小智 2

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

看看这个答案。

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

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

  • 从应用程序中退出
  • 在同一浏览器中导航到 Gmail 并注销(这将清除 Google 会话。
  • 尝试登录应用程序。然后此时您将被要求重新向 Google 进行身份验证。

希望这会有所帮助。