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/auth
和amazon-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() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章