本地猫鼬护照:找回密码

Mongoose passport local: retrieve password

我正在使用 passport-local-mongoose 将我的用户数据存储在 MongoDB 中。如果用户忘记了密码,我需要找回密码以通过电子邮件发送。它储存在盐田中。我怎样才能把它从盐中取出来?

P.S。无法使用 bcrypt,因为它在节点 > 0 时不起作用。10.x

将密码转换回其原始文本的任何形式不仅不安全,而且存储它的加盐哈希的全部意义在于首先使 difficult/impossible 成为可能。

您要做的是 send/email 用户重设密码 link 以便他们可以自己重新创建新密码。

它基本上需要创建一个您通过电子邮件发送给用户的唯一令牌。您还将该令牌存储到用户对象,以便稍后进行验证。像这样(伪代码):

app.post('/reset-password', function(req, res){
    var email = req.body.email; // you had the user enter their email
    User.findByEmail(email, function(err, user){
        user.token = new Token(); // some library to create a token
        mail(user.email, 'Please visit http://example.com/reset-password/' + user.token); 
    });
});

因此,当用户收到电子邮件并访问 http://example.com/reset-password/xxxxxxxx 时,您可以使用该令牌验证用户并让他们创建一个新密码。

app.post('/reset-password/:token', function(req, res){
    var token = req.params.token;
    var password = req.body.password; // you had the user enter a new password
    User.findByToken(token, function(err, user){
        user.hash = new HashFromPassword(password); // some function to create hash from password;
    });
});

现在您已经让用户成功重置了自己的密码。

有关更多实施细节,请查看这篇文章:How To Implement Password Reset In Node.js