4.8 KiB
4.8 KiB
id | title | challengeType | forumTopicId | localeTitle |
---|---|---|---|---|
58a25bcff9fc0f352b528e7d | Hash and Compare Passwords Asynchronously | 2 | 301578 | Хэш и сравнение паролей асинхронно |
Description
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(hash); //$2a$12$Y.PHPE15wR25qrrtgGkiYe2sXo98cjuMCG1YwSI5rJW1DSJp0gEYS bcrypt.compare('passw0rd!', hash, (err, res) => { console.log(RES); // true }); });Представьте свою страницу, когда вы думаете, что у вас все в порядке.
Instructions
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.
Tests
tests:
- text: Async hash generated and correctly compared
testString: getUserInput => $.get(getUserInput('url')+ '/_api/server.js') .then(data => { assert.match(data, /START_ASYNC[^]*bcrypt.hash.*myPlaintextPassword( |),( |)saltRounds( |),( |).*err( |),( |)hash[^]*END_ASYNC/gi, 'You should call bcrypt.hash on myPlaintextPassword and saltRounds and handle err and hash as a result in the callback'); assert.match(data, /START_ASYNC[^]*bcrypt.hash[^]*bcrypt.compare.*myPlaintextPassword( |),( |)hash( |),( |).*err( |),( |)res[^]*}[^]*}[^]*END_ASYNC/gi, 'Nested within the hash function should be the compare function comparing myPlaintextPassword to hash'); }, xhr => { throw new Error(xhr.statusText); })