Auth.currentAuthenticatedUser() 和 Auth.currentSession() 有什么区别?

use*_*224 10 amazon-cognito aws-amplify

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

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

Jav*_*ian 7

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

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

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

  • Amplify 已更新相关文档:https://docs.amplify.aws/lib/auth/manageusers/q/platform/js#retrieve-current-session (2认同)