我正在为reset the password
制作api。当我首次使用password
使用crypto.pbkdf2Sync
注册用户时,我首先生成salt,然后使用该盐对password
进行哈希处理,并在数据库中保存该盐和哈希密码。
reset password
export function newPassword(req,res) {
if (req.body.newpassword.length < 1)
return res.status(400).json({message: "Please Enter a new password"});
jwt.verify(req.token, TOKEN_SECRET, function (err, data) {
if (err) {
res.status(400).json(err);
}
else {
User.findOne({_id : data._id}).exec()
.then(user =>{
console.log(user);
var key = crypto.pbkdf2Sync(req.body.newpassword,user.salt,10000,64,'sha1').toString('base64');
console.log(key);
User.update({_id: data._id}, {$set: {password: key}})
.then(data => {
res.json(data)
})
.catch(err => {
res.status(400).json(err);
});
}
)
.catch(err =>{
res.status(400).json(err);
});
}
});
}
此处登录成功。
当我获取保存的salt
并使用该盐在重置password
期间再次对password
进行哈希处理。
crypto.pbkdf2Sync(newpassword,user.salt,defaultIterations,defaultKeyLength,'sha1')
显示邮件登录失败。 //这不是错误。如果auth失败,这是我设置的消息。
注意 - 我没有在数据库中再次更新salt
。
我想知道为什么它在显示成功之前第一次显示登录失败