Auth.currentAuthenticatedUser() 和 Auth.currentSession() 有啥区别?

Posted

技术标签:

【中文标题】Auth.currentAuthenticatedUser() 和 Auth.currentSession() 有啥区别?【英文标题】:What is the difference between Auth.currentAuthenticatedUser() and Auth.currentSession()?Auth.currentAuthenticatedUser() 和 Auth.currentSession() 有什么区别? 【发布时间】:2019-09-08 10:13:53 【问题描述】:

在每次调用后端之前,我使用Auth.currentAuthenticatedUser() 获取idToken.jwtToken 并将其在我的请求标头中传递给后端服务器以获取数据。

在我的用例中使用 Auth.currentSession() 而不是 Auth.currentAuthenticatedUser() 有区别吗?令牌过期后Auth.currentAuthenticatedUser()是否会刷新令牌,类似于Auth.currentSession()

【问题讨论】:

【参考方案1】:

放大验证的文档仍然很差,所以我查看了@aws-amplify/authamazon-cognito-identity-js 包的源代码,结果如下:

currentAuthenticatedUser 将尝试从本地存储中检索经过身份验证的用户信息(除非您的存储选项另有配置)。如果它不存在于存储中,那么它将调用 api 来检索用户信息,这涉及到在此过程中自动刷新用户会话。 currentSession 不会检查本地存储并始终调用 API,这还涉及在过期时自动刷新用户会话。

所以要直接回答您的问题,Auth.currentAuthenticatedUser() 方法并不总是给您一个有效的令牌。如果您的存储包含过期的令牌,它只会返回该令牌。这将要求您在返回的用户对象上调用 user.getSession() 以手动请求新的会话/令牌。我建议您使用Auth.currentSession(),因为它会自动处理令牌刷新并始终返回有效令牌。

【讨论】:

Amplify 更新了他们的相关文档:docs.amplify.aws/lib/auth/manageusers/q/platform/… 这个解释还是比文档好!

以上是关于Auth.currentAuthenticatedUser() 和 Auth.currentSession() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章