繁体   English   中英

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

[英]AWS Cognito + aws-amplify: session state always keep user logged in?

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

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

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

.
.
.

if (!keepSignedIn) {
    window.addEventListener('unload', function(event) {
        Auth.signOut();
    });
}

我很确定 logout() 方法会创建一个 promise - 它是异步运行的。 因此,在执行 promise 的注销代码之前,页面可能已被销毁。

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

没有办法停止页面的卸载,因为如果我们可以的话那会很糟糕。

你需要的是一个同步注销function。幸运的是,你可以清除浏览器本地存储,这是一个同步操作。 (本地存储是 Amplify 存储身份验证令牌的地方。)

if (!keepSignedIn) {
  window.addEventListener('unload', function(event) {
    localStorage.clear();
  });
}

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

您可以在 Auth.signOut() 之前清除 Amplify 缓存

import AmplifyCache from '@aws-amplify/cache';

AmplifyCache.clear();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM