在 node.js 中使用 passport-local 和 bcrypt 检查和更新密码

Posted

技术标签:

【中文标题】在 node.js 中使用 passport-local 和 bcrypt 检查和更新密码【英文标题】:Checking and updating passwords with passport-local and bcrypt in node.js 【发布时间】:2013-08-04 08:56:10 【问题描述】:

尝试在我的节点应用程序中验证用户的现有密码时,我收到 [Error: data and hash arguments required] 错误。上下文是我要求我的用户在用户个人资料页面中更改密码之前验证他们现有的密码。我的堆栈是使用本地护照和 bcrypt 的节点 + mondodb(通过猫鼬)。

相关代码为:

// code trying to match that returns the aforementioned error
req.user.comparePassword(req.body.password, function (err, isMatch) 
    if (err) 
        return console.error(err);
    
    if (isMatch) 
        console.log('passwords match');
        // now save new password

        // Password verification
        userSchema.methods.comparePassword = function (candidatePassword, cb) 
            bcrypt.compare(candidatePassword, this.password, function (err, isMatch) 
                if (err) return cb(err);
                cb(null, isMatch);
            );
        ;
    

req.user引用当前用户对象,`req.body.password'是从用户POST获取的密码。我正在使用来自本地护照示例 here. 的 UserSchema、护照策略和 Bcrypt 配置

有人可以提供有关如何在更新之前验证密码是否匹配的指导吗?

【问题讨论】:

【参考方案1】:

所以bcrypt.compare 抱怨缺少datahash 的一个论点。这意味着this.password 可能正在返回nullundefined。检查该用户的数据库记录并确保它存储了有效的哈希值。

【讨论】:

以上是关于在 node.js 中使用 passport-local 和 bcrypt 检查和更新密码的主要内容,如果未能解决你的问题,请参考以下文章

在 node.js 中使用命名参数

在 node.js 中使用 node-fetch 重用 TCP 连接

如何在 node.js 中使用 stroph.js 服务器端

如何使用 Passport.js 在 Node.js 中重置/更改密码?

使用 Javascript/Node.js 在代码中执行 mongoimport

如何在 Cappuccino 中使用 Node.js?