AWS Cognito用户属性更新报错‘User is not authenticated’及正确实现方法咨询
解决AWS Cognito更新用户属性时的「User is not authenticated」错误
我看到你遇到了Cognito更新用户属性时的认证错误,这是因为你没有先完成用户的认证流程就直接调用了updateAttributes方法。Cognito的updateAttributes要求用户必须处于已认证状态(持有有效的会话凭证)才能执行,你的代码只是实例化了CognitoUser对象,但没有完成登录验证步骤。
正确的实现流程
要修改用户属性,你需要先通过authenticateUser方法完成用户登录,在认证成功的回调中再执行属性更新操作:
- 创建AuthenticationDetails、CognitoUserPool和CognitoUser实例
- 调用
cognitoUser.authenticateUser()完成登录认证 - 在认证成功的
onSuccess回调里,调用updateAttributes修改用户属性
修改后的完整代码
update(username, password) { try { // 1. 准备认证信息和用户池实例 const authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails({ Username: username, Password: password }); const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); const userData = { Username: username, Pool: userPool }; const cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); // 2. 先完成用户认证 cognitoUser.authenticateUser(authenticationDetails, { onSuccess: (session) => { // 认证成功后,再执行属性更新 const attributeList = []; attributeList.push(new AmazonCognitoIdentity.CognitoUserAttribute({ Name: "custom:role", Value: "some new value" })); cognitoUser.updateAttributes(attributeList, (err, result) => { if (err) { console.log("\n\n\n\nUpdate Error: ", err, "\n\n\n"); return; } console.log("属性更新成功:", result); }); }, onFailure: (err) => { console.log("认证失败:", err); } }); } catch (e) { console.log("\n\n\n\n通用错误:", e, "\n\n\n"); } }
关键说明
- 必须先认证:Cognito的用户属性更新属于需要用户权限的操作,只有当用户通过
authenticateUser获取到有效的会话(包含ID Token、Access Token等)后,updateAttributes才能正常执行。 - 会话有效性:如果你的应用中已经有用户登录后的会话,可以直接复用已认证的CognitoUser对象,不需要每次更新都重新登录。
内容的提问来源于stack exchange,提问作者KIRAN K J
相关产品推荐
相关产品推荐

