本地猫鼬护照:找回密码
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
我正在使用 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