简体   繁体   中英

nodejs pbkdf2sync TypeError: Pass phrase must be a buffer

I am working on mean stack application. I am using crypto for password encryption but it is throwing below error.

TypeError: Pass phrase must be a buffer

TypeError: Pass phrase must be a buffer at pbkdf2 (crypto.js:702:20) at Object.exports.pbkdf2Sync (crypto.js:687:10) at model.userSchema.methods.setPassword (C:\\CMT_Platform\\server\\models\\user.model.js:24:24) at Object.module.exports.register (C:\\CMT_Platform\\server\\services\\auth.service.js:16:13) at exports.register (C:\\CMT_Platform\\server\\controllers\\auth.controller.js:22:39) at Layer.handle [as handle_request] (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\layer.js:95:5) at next (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\route.js:137:13) at Route.dispatch (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\route.js:112:3) at Layer.handle [as handle_request] (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\layer.js:95:5) at C:\\CMT_Platform\\node_modules\\express\\lib\\router\\index.js:281:22 at Function.process_params (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\index.js:335:12) at next (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\index.js:275:10) at Function.handle (C:\\CMT_P latform\\node_modules\\express\\lib\\router\\index.js:174:3) at router (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\index.js:47:12) at Layer.handle [as handle_request] (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\layer.js:95:5) at trim_prefix (C:\\CMT_Platform\\node_modules\\express\\lib\\router\\index.js:317:13) ::1 - - [11/Aug/2018:08:33:55 +0000] "POST /register HTTP/1.1" 400 42 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

Code:

var custschema= new mongoose.Schema({
    email: { type: String, unique: true, required: true },
    name: { type: String, required: true },
    role: { type: String },
    hash: String,
    salt: String
});

custschema.methods.setPassword = function(password) {
    this.salt = crypto.randomBytes(16).toString('hex');
    //this.hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'sha512').toString('hex');
    var buffer = new Buffer(this.salt, "binary");
    console.log(this.salt);
    console.log(buffer);
    this.hash = crypto.pbkdf2Sync(password, buffer, 1000, 64, 'sha512').toString('hex');
};

custschema.methods.validPassword = function(password) {
    //var hash = crypto.pbkdf2Sync(password, this.salt, 1000, 64, 'sha512').toString('hex');
    var hash = crypto.pbkdf2Sync(password, new Buffer(this.salt,'binary'), 1000, 64, 'sha512').toString('hex');
    return this.hash === hash;
};

Can somebody please guide me or enlighten me whether they have face this issue or not. Let me know if you want any more details.

Thanks

crypto.pbkdf2Sync returns Buffer and you are storing in the string OR you can convert buffer to string and store.

You can change the hast type to the Buffer and try Check mongoose data types here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM