使用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
相关产品推荐
相关产品推荐

