2016-02-27 63 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)