护照bcrypt throw"参数不正确"

时间:2016-02-27 06:34:55

标签: passport.js bcrypt passport-local

现在已经有一段时间了,并且似乎无法解决这个问题。看过帖子后我就可以找到& stackoverflow帖子。似乎没有任何作用。记录的错误:

Users/username/Sites/dev/node_modules/bcrypt-nodejs/bCrypt.js:642
    throw "Incorrect arguments";
        ^
Incorrect arguments

这里可以看到user.js和passport.js。 http://pastebin.com/CEy6QBkP

错误来自此函数和compareSync

var isValidPassword = function(user, password){
    return bCrypt.compareSync(password, user.password);
}

与哈希和&盐与req.body.password相比。任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:4)

您可以检查两个变量的类型,以确保两者都是字符串。一会儿回到同一个问题。下面的代码为我做了诀窍..希望这会有所帮助。

var mongoose = require('mongoose')
var bcrypt = require('bcrypt-nodejs')

var userSchema = mongoose.Schema({
    username: String,
    password: String,
    fullname : String,
    role: String,

})

userSchema.methods.generateHash = function(password){
  return bcrypt.hashSync(password, bcrypt.genSaltSync(10), null)
}

userSchema.methods.validPassword = function(password){
  return bcrypt.compareSync(password, this.password)
}

module.exports = mongoose.model('User', userSchema)

答案 1 :(得分:1)

如果您之前使用过社交登录来创建用户帐户,那么用户很可能没有与该帐户关联的密码。因此,错误可能是比较空密码的结果。

检查您的用户模型并进行此更改

var isValidPassword = function(user, password){
if(this.password != null) {return bcrypt.compareSync(password, this.password);
} else {return false; }}