当前位置: 首页 > 知识库问答 >
问题:

如何允许我的用户在Cognito用户池上重置密码?

元望
2023-03-14

所以在我的应用程序中,我显然想为用户提供重置密码的方法。我遇到的问题是,用户池的新留档在这个主题上非常模糊。以下是他们告诉你忘记密码流要做的事情,你可以在以下链接找到:

cognitoUser.forgotPassword({
        onSuccess: function (result) {
            console.log('call result: ' + result);
        },
        onFailure: function(err) {
            alert(err);
        },
        inputVerificationCode() {
            var verificationCode = prompt('Please input verification code ' ,'');
            var newPassword = prompt('Enter new password ' ,'');
            cognitoUser.confirmPassword(verificationCode, newPassword, this);
        }
    });

http://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-javascript-examples.html

然而,当我将这段代码放入定义并登录cognitoUser的项目中时,似乎什么都没有发生。我知道我需要以某种方式将此代码与向用户发送验证代码并要求他们输入新密码集成在一起,但找不到任何有关如何执行此操作的信息。思想?

谢谢

共有3个答案

查学文
2023-03-14

我也有同样的问题。可以通过以下方式使用confirmPassword()完成此任务。

//validation of input from form
req.checkBody('email', 'Username is required').notEmpty();
req.checkBody('password', 'Password is required').notEmpty();
req.checkBody('confirmationcode', 'Confirmation Code is required').notEmpty();


var confirmationCode = req.body.confirmationcode;
var password = req.body.password;
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);


var userData = {
    Username: req.body.email,
    Pool: userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);

cognitoUser.confirmPassword(confirmationCode, password, {
    onFailure(err) {
        console.log(err);
    },
    onSuccess() {
        console.log("Success");
    },
});
白烨煜
2023-03-14

使用忘记密码流重置密码有两个步骤:

  1. 通过向服务请求验证代码来启动流程。将向用户的电话/电子邮件发送代码

使用这两个功能执行上述步骤并重置密码:

>

  • cognitoUser.forgotPassword():这将启动忘记密码流程。该服务生成一个验证码并将其发送给用户。通过callback.inputVerificationCode(数据)返回的“数据”指示验证代码的发送位置。

    cognitoUser.confirmPassword():使用此函数提供的验证码设置新密码。

  • 鱼恩
    2023-03-14

    AWS的文档在这个话题上很糟糕(认知)。你基本上需要设置认知用户,然后调用forgetPassword

    export function resetPassword(username) {
        // const poolData = { UserPoolId: xxxx, ClientId: xxxx };
        // userPool is const userPool = new AWSCognito.CognitoUserPool(poolData);
    
        // setup cognitoUser first
        cognitoUser = new AWSCognito.CognitoUser({
            Username: username,
            Pool: userPool
        });
    
        // call forgotPassword on cognitoUser
        cognitoUser.forgotPassword({
            onSuccess: function(result) {
                console.log('call result: ' + result);
            },
            onFailure: function(err) {
                alert(err);
            },
            inputVerificationCode() { // this is optional, and likely won't be implemented as in AWS's example (i.e, prompt to get info)
                var verificationCode = prompt('Please input verification code ', '');
                var newPassword = prompt('Enter new password ', '');
                cognitoUser.confirmPassword(verificationCode, newPassword, this);
            }
        });
    }
    
    // confirmPassword can be separately built out as follows...  
    export function confirmPassword(username, verificationCode, newPassword) {
        cognitoUser = new AWSCognito.CognitoUser({
            Username: username,
            Pool: userPool
        });
    
        return new Promise((resolve, reject) => {
            cognitoUser.confirmPassword(verificationCode, newPassword, {
                onFailure(err) {
                    reject(err);
                },
                onSuccess() {
                    resolve();
                },
            });
        });
    }
    
     类似资料:
    • 如果我在AWS Cognito中单击用户的“重置密码”按钮,它所做的就是重新发送验证电子邮件,其中包含帐户注册电子邮件代码。 但是,如果用户获取该代码并将其输入验证页面,AWS将返回错误: 首先,我如何让Cognito发送真正的“密码重置”电子邮件,而不是“确认您的注册”电子邮件? 我假设它给我这个错误,因为验证JS正在调用: 而不是一些未记录的密码重置功能。我应该调用什么函数?

    • 我们用的是Cognito。一切都很好。我使用AdminCreateUser API添加了一个用户,他们收到了临时密码。不幸的是,他们等待了一个多月才登录,现在当他们尝试使用临时密码登录时,Cognito返回以下错误: 我该怎么做呢?我在Cognito UI中没有看到任何重置按钮。是否有我可以调用的CLI或API?

    • 我刚刚开始和AWS一起工作,学习AWS。我正在使用AWS移动中心的服务,到目前为止已经设置了登录 一切正常,现在我正在处理忘记密码和更新密码。 问题是,AWS设置忘记密码的方式是: 首先输入用户名,然后在用户输入用户名后,AWS通过SMS向与该用户名关联的电话号码发送验证码。 这是一个问题,因为这意味着任何人都可以输入任何用户名,并会发送一条短信,导致我的短信付款增加,老实说,这看起来很草率。 我

    • 我正在使用AWS Congito用户池进行帐户管理,其中Cognoto标识池将此用户池作为标识提供者。我用它来控制通过API网关对API的访问,API网关向Lambda发送请求。我的Lambda是使用Micronaut用Java8实现的。所有这些都很好。 在Lambda中,我从中的获得名称: 在Cognito标识符的字符串名称中返回的是什么。像这样的东西: us-east-1:xxxxe650-5

    • 我试图使用Cognito用户池控制台创建一个用户(我正在设置用户名和临时密码的值),但我一直收到这个错误。 属性不符合架构:生日:数字不能超过10个字符(服务:AWSCognitoIdentityProviderService;状态代码:400;错误代码:InvalidParameterException;请求ID:98f3de9e-5ce3-11e7-98e8-9d0c69d31df9) 使用无

    • 我们的设置是: 创建电子邮件/密码帐户或登录Facebook 我能够创建两个成功独立于彼此与AWS Cognito。 我想解决的问题是,如果用户先有一个电子邮件/密码帐户,然后单击Facebook登录,我希望他们链接并提示用户确认他们有权访问该电子邮件/密码帐户。 一旦用户确认以后,他们应该能够登录Facebook或通过电子邮件/密码登录来访问和调整相同的帐户。 Facebook用户在Cognit