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

使用AWS SDK修改密码时遭遇User not authenticated错误求助

解决AWS SDK修改密码报"User not authenticated"错误的方案

核心前提:确保用户会话有效

AWS Cognito的changePassword方法要求用户处于已认证状态,必须持有有效的AccessToken和IdToken且会话未过期。以下是具体修复步骤:

  • 完成完整认证流程再调用修改密码
    不要直接使用注册后的临时令牌发起请求,必须走完完整登录流程:

    1. 注册用户后,通过initiateAuth或authenticateUser接口完成登录,获取包含AccessToken、IdToken的AuthenticationResult
    2. 仅使用上述返回的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:54:37