我得到的错误“返回binding.PBKDF2(口令,盐,迭代KEYLEN,回调); ^类型错误:不是一个缓冲区”

问题描述:

请参见下面的完整错误代码:我得到的错误“返回binding.PBKDF2(口令,盐,迭代KEYLEN,回调); ^类型错误:不是一个缓冲区”

 
crypto.js:601 
    return binding.PBKDF2(password, salt, iterations, keylen, callback); 
       ^
TypeError: Not a buffer 
    at pbkdf2 (crypto.js:601:20) 
    at Object.exports.pbkdf2Sync (crypto.js:592:10) 
    at model.UserSchema.methods.hashPassword (/Users/markie13/documents/mean/meanPassport/app/models/user.server.model.js:59:16) 
    at model.UserSchema.methods.authenticate (/Users/markie13/documents/mean/meanPassport/app/models/user.server.model.js:63:32) 
    at Query. (/Users/markie13/documents/mean/meanPassport/config/strategies/local.js:19:14) 
    at /Users/markie13/documents/mean/meanPassport/node_modules/mongoose/node_modules/kareem/index.js:177:19 
    at /Users/markie13/documents/mean/meanPassport/node_modules/mongoose/node_modules/kareem/index.js:109:16 
    at process._tickCallback (node.js:442:13) 

我在Amos Haviv的书MEAN Stack Development中工作,并在第6章中讨论 - 如果有人在意。

下面是引发错误(见行号意见)代码:

UserSchema.pre('save', function (next) { 
    if (this.password) { 
     this.salt = new Buffer(crypto.randomBytes(16).toString('base64'), 'base64'); 
     this.password = this.hashPassword(this.password); 
    } 
    next(); 
}); 
UserSchema.methods.hashPassword = function (password) { 
    return crypto.pbkdf2Sync(password, this.salt, 10000, 64).toString('base64');//line 59 
}; 
UserSchema.methods.authenticate = function (password) { 
    return this.password === this.hashPassword(password);//line 63 
}; 

所以,事实证明,我被填充蒙戈DB与非散列字符串作为密码。

一旦我用数据库中的哈希密码登录,它工作正常。

现在我需要了解错误检查...