我正在开发一个允许用户更改密码的应用程序。
我将Node.js与mongoose
和crypto
一起使用。
为了生成密码的哈希值,我已经迷上了模型的pre('save')事件。所以基本上当你使用它时:
var user = new User({password: '123'});
user.save(); // the password will be encrypted automatically
能够更改密码,我需要找到一种方法,如果用户实际更改了密码或修改了任何其他字段。例如:
var user = User.findById('1234567', function(error, user){
user.name = 'Hello';
user.save(); // this will hash the password again, although it is not necessary
})
我使用名为crypto
的Node.js模块为密码生成哈希:
crypto.pbkdf2(password, salt, 5000, 512, 'sha512', function(error, buffer){
this.mixins.callback.call(callback, [error, buffer.toString('base64')]);
}.bind(this));
有没有办法检查password
是否已经过哈希?
如果没有,我将再次生成哈希值。
由于
答案 0 :(得分:0)
这本来就是坏方法。只需调用字段password_hash
并始终显式传递哈希值。否则,在稍微更改配置后,您可能会意外地开始存储未散列的密码。
如果允许任意字符串作为密码,通常也无法区分哈希与未哈希的字符串。