Хэш и сравнение паролей асинхронно
Напомним, что этот проект строится на следующем стартовом проекте Glitch или клонируется из GitHub . Поскольку хеширование рассчитано на интенсивность вычислений, рекомендуется делать это асинхронно на вашем сервере, чтобы избежать блокировки входящих соединений, пока вы hash. Все, что вам нужно сделать для хэша, асинхронный пароль - это вызов bcrypt.hash(myPlaintextPassword, saltRounds, (err, hash) => { /*Store hash in your db*/ });
Добавьте эту хеширующую функцию на свой сервер (мы уже определили переменные, используемые в этой функции для вас) и запишите ее на консоль, чтобы вы ее увидели! На этом этапе вы обычно сохраняете хэш в своей базе данных. Теперь, когда вам нужно выяснить, являются ли новые данные теми же данными, что и хеш, вы просто используете функцию сравнения
bcrypt.compare(myPlaintextPassword, hash, (err, res) => { /*res == true or false*/ });
, Добавьте это в свою существующую хеш-функцию (поскольку вам нужно дождаться завершения хеша до вызова функции сравнения) после того, как вы зарегистрируете завершенный хэш и запишите «res» на консоль в сравнении. Вы должны увидеть в консоли хэш, тогда напечатано «true»! Если вы измените «myPlaintextPassword» в функции сравнения на «someOtherPlaintextPassword», тогда он должен сказать false. bcrypt.hash ('passw0rd!', 13, (err, hash) => { console.log (хэш); //$2a$12$Y.PHPE15wR25qrrtgGkiYe2sXo98cjuMCG1YwSI5rJW1DSJp0gEYS bcrypt.compare ('passw0rd!', hash, (err, res) => { console.log (RES); //правда }); });Представьте свою страницу, когда вы думаете, что у вас все в порядке.
Add this hashing function to your server(we've already defined the variables used in the function for you to use) and log it to the console for you to see! At this point you would normally save the hash to your database.
Now when you need to figure out if a new input is the same data as the hash you would just use the compare function.
bcrypt.compare(myPlaintextPassword, hash, (err, res) => {
/*res == true or false*/
});
Add this into your existing hash function(since you need to wait for the hash to complete before calling the compare function) after you log the completed hash and log 'res' to the console within the compare. You should see in the console a hash then 'true' is printed! If you change 'myPlaintextPassword' in the compare function to 'someOtherPlaintextPassword' then it should say false.
bcrypt.hash('passw0rd!', 13, (err, hash) => {
console.log(hash);
//$2a$12$Y.PHPE15wR25qrrtgGkiYe2sXo98cjuMCG1YwSI5rJW1DSJp0gEYS
bcrypt.compare('passw0rd!', hash, (err, res) => {
console.log(res); //true
});
});
Submit your page when you think you've got it right.