将候选密码与Mongo中的bcrypt哈希进行比较

时间:2013-06-20 01:02:14

标签: mongodb authentication bcrypt password-encryption findandmodify

我想制作一个Mongo FindAndModify请求,该请求通过电子邮件和密码查找用户,然后在一个请求中将其更新为原子。使用基本的MD5哈希密码和预定义的盐,我会在请求之前计算哈希并发出以下请求:

db.people.findAndModify( {
    query: { email: "a@a.com", password: "<hashed value>"},
    update: { $set: { myField: "myNewValue" } }
} );

但是bcrypt密码每次都不一样,因为每个哈希生成都使用不同的盐,所以这种方法不起作用。目前,我必须通过电子邮件找到用户,并使用BCrypt.checkPassword函数在代码中检查他的密码,如果返回true,则更新我在数据库中的值。所以我最终做了两个请求,它在Mongo中不是原子的。

那么有没有办法在一个MongoDB请求中执行此操作(与bcrypt哈希和更新相比)? (我在Mongo网站上看过一篇关于如何手动实现两阶段提交的文章,但想知道是否有一个干净又好的解决方案。)

0 个答案:

没有答案