使用AWS SDK修改密码时遭遇User not authenticated错误求助
解决AWS SDK修改密码报"User not authenticated"错误的方案
核心前提:确保用户会话有效
AWS Cognito的changePassword方法要求用户处于已认证状态,必须持有有效的AccessToken和IdToken且会话未过期。以下是具体修复步骤:
完成完整认证流程再调用修改密码
不要直接使用注册后的临时令牌发起请求,必须走完完整登录流程:- 注册用户后,通过
initiateAuth或authenticateUser接口完成登录,获取包含AccessToken、IdToken的AuthenticationResult - 仅使用上述返回的
AccessToken作为修改密码接口的参数
- 注册用户后,通过
正确构造Cognito用户实例(针对amazon-cognito-identity-js)
必须基于已认证的用户对象调用修改密码方法,示例代码:import { CognitoUserPool, CognitoUser, AuthenticationDetails } from 'amazon-cognito-identity-js'; // 初始化用户池 const poolData = { UserPoolId: '你的用户池ID', ClientId: '你的客户端ID' }; const userPool = new CognitoUserPool(poolData); // 构造认证信息 const authDetails = new AuthenticationDetails({ Username: '用户账号', Password: '当前密码' }); // 构造用户对象 const userData = { Username: '用户账号', Pool: userPool }; const cognitoUser = new CognitoUser(userData); // 先完成认证再修改密码 cognitoUser.authenticateUser(authDetails, { onSuccess: (result) => { cognitoUser.changePassword('当前密码', '新密码', (err, res) => { err ? console.error(err) : console.log('密码修改成功', res); }); }, onFailure: (err) => console.error('认证失败', err) });AWS SDK v3调用规范(@aws-sdk/client-cognito-identity-provider)
调用ChangePasswordCommand时必须传入有效AccessToken,示例代码:import { CognitoIdentityProviderClient, ChangePasswordCommand } from "@aws-sdk/client-cognito-identity-provider"; const client = new CognitoIdentityProviderClient({ region: '你的区域' }); const command = new ChangePasswordCommand({ PreviousPassword: '当前密码', ProposedPassword: '新密码', AccessToken: '用户认证后的有效AccessToken' }); try { const response = await client.send(command); console.log('密码修改成功', response); } catch (error) { console.error(error); }排查额外问题点
- 解码
AccessToken确认token_use为access且exp(过期时间)未到 - 检查用户池客户端配置,确保已启用
ALLOW_CHANGE_PASSWORD授权类型 - 若存在缓存会话失效问题,清除本地存储中Cognito相关缓存后重新登录获取令牌
- 解码
内容的提问来源于stack exchange,提问作者Amogh
相关产品推荐
相关产品推荐

