如何比较护照当地猫鼬

时间:2018-06-20 22:14:46

标签: node.js passport.js bcrypt passport-local

我想将登录用户的密码与他们从表单中提供的密码进行比较,因为我需要确保它确实是用户,因为我希望为他们提供启用2fa的选项,并且我相信如果用户登录到仪表板,任何人都可以启用该功能。我正在使用bcrypt来比较密码,但会引发错误..也在使用passport-local-mongoose进行我的用户注册和身份验证。

router.post("/enableTwoFa/:id", isLoggedIn, isVerified, function(req, res){
if(req.isAuthenticated){
    User.findById(req.params.id, function(err,found){
    if(err){
        res.redirect("back")
        res.send('User not found with the proper ID')
    } else {
        if(req.body.accountPassword){
            console.log(found)
            bcrypt.compare(req.body.accountPassword,found.password, function(err,success){
                if(err){
                    console.log(err)
                    res.send('There was a problem somewhere')
                } else {
                    console.log(success)
                    res.send('password hashed')
                }
            })

        } else {

                res.send('Please input your account password!!')
        }
    }
})
} else {
    res.send('You are not authorized for this request')
}

})

它引发丢失数据和哈希的错误。但是我不知道如何找到必填字段。或者如果有一个功能可以处理护照中的内容,这是一个新手。

Error: data and hash arguments required
    at Object.compare (/home/ubuntu/workspace/bit-main/main/node_modules/bcrypt/bcrypt.js:209:17)
    at /home/ubuntu/workspace/bit-main/main/routes/dashboard.js:448:24
    at Query.<anonymous> (/home/ubuntu/workspace/bit-main/main/node_modules/mongoose/lib/model.js:3928:16)
    at /home/ubuntu/workspace/bit-main/main/node_modules/kareem/index.js:297:21
    at /home/ubuntu/workspace/bit-main/main/node_modules/kareem/index.js:135:16
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)

1 个答案:

答案 0 :(得分:0)

在对这个问题进行了一些研究之后,我发现在护照本地猫鼬中有一个authenticate()函数可以处理此请求,因此无需使用bcrypt。 并接受3 cb(hashError,model,passwordError)。因此,如果有人遇到相同的问题,我决定回答。

router.post("/enable2fa/:id", isVerified, function(req, res){
    if(req.isAuthenticated){
            User.findById(req.params.id, function(err,found){
            if(err){
                res.redirect("back")
                res.send('User not found with the proper ID')
            } else {
                if(req.body.accountPassword){
                    found.authenticate(req.body.accountPassword, function(err,model,passwordError){
                        if(passwordError){
                            console.log(err)
                            res.send('The given password is incorrect!!')
                        } else if(model) {
                            console.log(`correct password ${model}`)
                              *run other code stuff*
                            res.send('2fa enabled for this account')
                        }
                    })
                } else {
                     res.send('Please input your account password!!')
                }
            }
        })
    } else {
        res.send('You are not authorized for this request')
    }

})