我正在使用 aws amplify 并且我知道令牌会在需要时自动刷新,并且这是在幕后完成的。
我需要做的是通过 Lambda 后端进程更改 cognito 用户池中用户的自定义属性。这是我能做到的,而且它正在工作。但是,Web 客户端用户永远不会看到这个新的自定义属性,我认为他们可以看到它的唯一方法是令牌是否被刷新,因为该值存储在 JWT 令牌中。
我正在使用 aws amplify 并且我知道令牌会在需要时自动刷新,并且这是在幕后完成的。
我需要做的是通过 Lambda 后端进程更改 cognito 用户池中用户的自定义属性。这是我能做到的,而且它正在工作。但是,Web 客户端用户永远不会看到这个新的自定义属性,我认为他们可以看到它的唯一方法是令牌是否被刷新,因为该值存储在 JWT 令牌中。
截至 2021 年的正确解决方案是调用await Auth.currentAuthenticatedUser({bypassCache: true})
.
以下是按需更新令牌的方法(强制)
import { Auth } from 'aws-amplify';
try {
const cognitoUser = await Auth.currentAuthenticatedUser();
const currentSession = await Auth.currentSession();
cognitoUser.refreshSession(currentSession.refreshToken, (err, session) => {
console.log('session', err, session);
const { idToken, refreshToken, accessToken } = session;
// do whatever you want to do now :)
});
} catch (e) {
console.log('Unable to refresh Token', e);
}
未记录,但您可以refreshSession
在用户上使用该方法。您对 currentAuthenticatedUser 和 currentSession 的下一次调用将更新配置文件属性(和组)
User = Auth.currentAuthenticatedUser()
Session = Auth.currentSession()
User.refreshSession(Session.refreshToken)
就像这里说的:
访问令牌和 ID 令牌有效期为 1 小时。使用 Amplify,您可以使用currentSession
或currentUserInfo
在Auth
课堂上获取有关会话的信息,以便能够检索有关令牌的信息。