2016-02-27 65 views
1

一直在这工作了一段时间,似乎无法弄清楚。已经看过帖子,我可以找到& stackoverflow post。似乎没有任何工作。记录错误:护照bcrypt扔“不正确的参数”

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哈希&盐。任何帮助将不胜感激。谢谢。

+1

抬头;使用bcrypt同步功能可能是一个非常糟糕的主意,因为它被设计为故意慢。每次调用它时,它会阻止您的应用程序大约300毫秒。介意这一点。 – renatoargh

回答

2

您可以检查两个变量的类型以确保两个都是字符串。一段时间后,我们又遇到了同样的问题。下面的代码为我做了诀窍。希望这会有所帮助。

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)