You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从客户端强制刷新AWS Cognito令牌以获取更新的自定义用户属性?

解决AWS Amplify中Cognito自定义属性更新后前端无法同步的问题

你说得完全没错——Cognito的ID和Access Token是在用户首次认证(或上次刷新令牌)时生成的,自定义用户属性会被嵌入到这些令牌的payload里。所以当你通过Lambda后端修改了用户属性后,前端手里的旧令牌自然不会同步更新,必须刷新令牌才能拿到包含新属性的新令牌。

下面是具体的解决步骤和注意事项:

1. 手动触发令牌刷新

Amplify默认会在令牌即将过期时自动刷新,但如果你刚修改了属性需要立即同步,就需要手动强制刷新会话,跳过本地缓存:

import { Auth } from 'aws-amplify';

async function fetchUpdatedUserAttributes() {
  try {
    // 强制从Cognito获取新会话,跳过本地缓存
    const session = await Auth.currentSession({ bypassCache: true });
    
    // 从ID Token的Payload中提取自定义属性
    const idTokenPayload = session.getIdToken().getPayload();
    const updatedCustomAttr = idTokenPayload['custom:你的属性名'];
    console.log('更新后的自定义属性:', updatedCustomAttr);

    // 或者重新获取完整的用户信息,同样会返回最新属性
    const updatedUser = await Auth.currentAuthenticatedUser({ bypassCache: true });
    console.log('完整的更新后用户信息:', updatedUser.attributes);
  } catch (error) {
    console.error('刷新令牌或获取用户信息失败:', error);
    // 处理Refresh Token过期的情况,比如引导用户重新登录
    if (error.name === 'NotAuthorizedException') {
      alert('登录状态已过期,请重新登录');
      await Auth.signOut();
      // 跳转到登录页
    }
  }
}

2. 关键配置检查

确保你的自定义属性在Cognito用户池中有正确的配置:

  • 登录AWS控制台,进入你的Cognito用户池
  • 转到属性 → 自定义属性,确认你修改的属性存在
  • 转到应用客户端设置 → 启用的身份验证流程,确保勾选了对应的令牌刷新流程(比如ALLOW_REFRESH_TOKEN_AUTH)
  • 转到应用客户端设置 → ID Token或Access Token的属性,确认你的自定义属性被勾选为包含在令牌中

3. 优化实时同步体验

如果你的应用需要实时感知属性变化,可以考虑这些方案:

  • 在Lambda完成属性修改后,通过WebSocket(比如AWS IoT Core或API Gateway WebSocket)给前端推送通知,触发前端主动刷新令牌
  • 避免频繁手动刷新令牌,会增加Cognito的调用量,建议只在确知属性已更新时触发刷新
  • 如果属性更新不要求实时,可以依赖Amplify的自动刷新机制(默认令牌过期前5分钟自动刷新)

内容的提问来源于stack exchange,提问作者Dan Herman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:45:37