Поэтому у меня есть этот кодне может получить значение функции
User.prototype.save = function (fn){ //User is just an object
var password = hashPassword(null, this.pswrd);
var query=client.query('INSERT INTO myUser(usrnm,pswrd)VALUES($1,$2) ,[this.name,password], function(err, result) {
if(err) {console.log(err)}
});
query.on("end", function (result) {client.end();});
}
и hashPassword
является
версия 1
function hashPassword(salt,pass){
var salt = salt?salt:new Buffer(crypto.randomBytes(128)).toString('hex');
var pass = pass;
var a=crypto.pbkdf2(pass, salt , 10000, 256, 'sha512',function(err, derivedKey) {
return salt + (new Buffer(derivedKey).toString('hex'));
});
return a;
}
я a
и password
, undifined
. Я использую return
, поэтому, почему может только a
взять значение?
версия 2
function hashPassword(salt,pass){
var salt = salt?salt:new Buffer(crypto.randomBytes(128)).toString('hex');
var pass = pass;
crypto.pbkdf2(pass, salt , 10000, 256, 'sha512',function(err, derivedKey) {
pass = salt + (new Buffer(derivedKey).toString('hex'));
console.log("pass in > "+pass);
});
console.log("pass out > "+pass);
return pass;
}
я pass in > fhjvoefvuhvuoedfv... (is hashed correctly)
, но pass out > undefined
. Теперь pass
является глобальным до hashPassword
, и я изменил его значение внутри crypto, так почему он его не сохраняет?
версия 3
function hashPassword(salt,pass){
var salt = salt?salt:new Buffer(crypto.randomBytes(128)).toString('hex');
var pass = pass;
var pass2;
crypto.pbkdf2(pass, salt , 10000, 256, 'sha512',function(err, derivedKey) {
pass2 = salt + (new Buffer(derivedKey).toString('hex'));
console.log("pass2 in > "+pass2);
});
console.log("pass2 out > "+pass2);
return pass2;
}
Итак, я попытался решить проблему Version2 путем добавления дополнительного вар и я получаю pass2 in > fhjvoefvuhvuoedfv... (is hashed correctly)
, но pass2 out > undefined
. Как это возможно?
версия 4
Согласно первому ответу here Я попробовал:
var password ;
hashPassword(null, user.pswrd,function(p)
{
password=p;
}
);
console.log("password > "+password);
и
function hashPassword(salt,pass, fn){
var salt = salt?salt:new Buffer(crypto.randomBytes(128)).toString('hex');
var pass = pass;
crypto.pbkdf2(pass, salt , 10000, 256, 'sha512',function(err, derivedKey) {
fn(salt + (new Buffer(derivedKey).toString('hex')));
});
}
и password
является undefined
.
Так что, пожалуйста, я пробовал, и я пробовал и все еще ничего, объясните и покажите мне, что делать.
Благодаря
Код, который вы предлагаете, выглядит как моя версия 4. Можете ли вы быть более конкретным? Кроме того, я не совсем понимаю это: «Делайте остальную часть своей работы внутри обратного вызова». Какая работа и какой обратный вызов? Спасибо – user2860857
@ user2860857 Я только что обновил свой ответ. Пожалуйста, не стесняйтесь спрашивать, есть ли у вас больше вопросов об этом. –
Итак, если я получил его, вы имеете в виду, продолжайте всю работу внутри этого 'hashPassword (null, user.pswrd, function (p) { password = p; console.log (" password> "+ password); }); Я обновил свой первоначальный вопрос. Должен ли я передавать запрос внутри 'hashPassword (null, user.pswrd, function (p) {....'? Почему запрос может получить значение 'password'? Область функций? Есть ли способ оставить код как есть в моем вопросе и передать значение запросу? Спасибо – user2860857