AWS Cognito + aws-amplify:会话状态始终保持用户登录状态?

Jed*_*Jed 4 amazon-web-services amazon-cognito aws-amplify

我使用 AWS Cognito 和 aws-amplify 来管理用户身份验证。当我加载我的应用程序时,我调用Auth.currentSession()它似乎总是返回我登录的用户,就好像我没有通过调用显式注销一样Auth.signOut()

如果用户选择“保持用户登录”,我对此表示同意,但如果他们不这样做,我将如何确保用户在离开应用程序后注销?

我尝试在我的方法中添加事件侦听器,login()但这不起作用,即当我返回应用程序时用户仍然登录:

.
.
.

if (!keepSignedIn) {
    window.addEventListener('unload', function(event) {
        Auth.signOut();
    });
}
Run Code Online (Sandbox Code Playgroud)

jam*_*lol 6

我很确定 logout() 方法创建了一个承诺 - 它是异步操作的。因此,在执行 Promise 的注销代码之前,该页面可能已被销毁。

您可以通过执行来确认这一点console.log(Auth.signOut());。如果这是一个承诺,它会记录Promise { <pending> }

没有办法停止页面的卸载,因为如果可以的话那就糟糕了。

您需要的是同步注销功能。幸运的是,您只需清除浏览器本地存储即可,这是一个同步操作。(本地存储是 Amplify 存储身份验证令牌的位置。)

if (!keepSignedIn) {
  window.addEventListener('unload', function(event) {
    localStorage.clear();
  });
}
Run Code Online (Sandbox Code Playgroud)

根据您的情况,您可能需要查找并删除单个本地存储项目,而不是全部清除。

  • 这个概念奏效了。正如您所建议的,我没有清除所有项目,而是通过删除以“CognitoIdentityServiceProvider”开头的所有键来定位与 Cognito 相关的本地存储项目 (2认同)