Я пытаюсь использовать хэш-коды с crypto
, и я не могу их сохранить в базе данных.
У меня node.js 4.2.3 express 4.13.3, а моей базой данных является PostgreSQL 9.1. Поле character varying (255)
и называется pswrd
.
Это мой код:
var tobi = new User({
usrnm:'sp',
pswrd:'an'
});
module.exports = User;
function User(obj){
for(var key in obj){
this[key] = obj[key];
}
}
User.prototype.save = function (fn){
var user=this;
//EDIT, added this :
var psw ;
var salt = crypto.randomBytes(50).toString('base64');
crypto.pbkdf2(user.pswrd, salt, 10000, 150, 'sha512',function(err, derivedKey) {
//user.pswrd = derivedKey.toString('hex');
//EDIT, added this:
var justCrypted = derivedKey.toString('hex');
});
var query=client.query('INSERT INTO mytable(usrnm,pswrd)VALUES($1,$2) RETURNING mytable_id',[user.usrnm,user.pswrd], function(err, result) {
if(err) {console.log(err)}
else {
var newlyCreatedId = result.rows[0].mytable_id;
}
});
query.on("end", function (result) {console.log(result);client.end();});
}
tobi.save(function (err){
if (err)throw error;
console.log("yo");
})
Чтобы запустить это, введите node lib/user
. Я не получаю ошибок, но пароль не сохраняется должным образом. Первое значение сохраняется, an
, а не хэшированное. Что мне здесь не хватает?
ИЗМЕНИТЬ
Ответ AshleyB хорош, но, пожалуйста, помогите мне понять, как передать данные из внутренней функции (crypto.pbkdf2
) в ее внешний (User.prototype.save = function (fn)
), когда внутренний имеет предпределенный, фиксированный синтаксис (crypto.pbkdf2
), поэтому я не знаю, смогу ли я его отредактировать.
Как я могу оставить код как есть и все еще передать justCrypted
обратно на psw
(см. изменения в коде)? Если бы это была функция, которую я написал, я мог бы использовать apply
, я думаю, но, crypto.pbkdf2
предваряется, и я не знаю, могу ли добавить к нему материал.
Спасибо