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

使用Cognito与JavaScript获取Web应用当前登录用户信息

在Cognito中获取当前登录用户的正确方式

问题背景

我正在用JavaScript、Lambda和Cognito开发Web应用,需要在用户登录后在其他页面获取当前用户信息。请问如何访问当前登录用户?使用var user = localStorage.getItem("user");是否可行?还是应该用以下代码?

var poolData = {
 UserPoolId : 'us-east-1_xxxxxxxxxxx', // 你的用户池ID
 ClientId : '7q1q1q1q1q1q1q1q1q1q1q1q1q1' // 你的客户端ID
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var cognitoUser = userPool.getCurrentUser();

两种方式的对比与结论

1. 手动读取localStorage的方式

如果是你自己登录后手动将用户信息存入localStorage,这种方式确实能拿到数据,但非常不推荐:

  • 数据一致性风险:Cognito的会话过期、用户主动登出等场景下,手动存在localStorage里的信息不会自动同步更新,容易出现“已登出但仍能拿到旧用户信息”的问题。
  • 安全性问题:手动存储的用户信息没有经过Cognito的会话校验,无法确保信息的有效性和真实性。

2. Cognito官方SDK方法(推荐)

你贴的这段代码是正确且推荐的方式,userPool.getCurrentUser()是Cognito SDK提供的官方API,它会自动从Cognito维护的会话存储中获取当前登录用户,并且内部已经处理了会话有效性校验、token刷新等逻辑。

不过要注意,getCurrentUser()只是返回用户对象,要获取用户的详细属性和有效会话,还需要调用getSession方法:

var poolData = {
 UserPoolId : 'us-east-1_xxxxxxxxxxx', // 你的用户池ID
 ClientId : '7q1q1q1q1q1q1q1q1q1q1q1q1q1' // 你的客户端ID
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var cognitoUser = userPool.getCurrentUser();

if (cognitoUser) {
  cognitoUser.getSession(function(err, session) {
    if (err) {
      // 处理会话获取失败的情况,比如用户未登录或会话过期
      console.error(err);
      return;
    }
    // 验证会话是否有效
    if (session.isValid()) {
      // 获取用户属性
      cognitoUser.getUserAttributes(function(err, attributes) {
        if (err) {
          console.error(err);
          return;
        }
        // 遍历并使用用户属性
        attributes.forEach(attr => {
          console.log(`${attr.getName()}: ${attr.getValue()}`);
        });
      });
    } else {
      // 会话无效,引导用户重新登录
    }
  });
} else {
  // 当前无登录用户,引导登录
}

总结

优先使用Cognito官方SDK提供的getCurrentUser()配合getSession的方式来获取用户信息,不要手动操作localStorage,避免数据不一致和安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:53:11