45 lines
3.9 KiB
Markdown
45 lines
3.9 KiB
Markdown
|
---
|
|||
|
id: 58a25bcff9fc0f352b528e7d
|
|||
|
title: Hash and Compare Passwords Asynchronously
|
|||
|
challengeType: 2
|
|||
|
videoUrl: ''
|
|||
|
localeTitle: Хэш и сравнение паролей асинхронно
|
|||
|
---
|
|||
|
|
|||
|
## Description
|
|||
|
<section id="description"> Напомним, что этот проект строится на следующем стартовом проекте <a href="https://glitch.com/#!/import/github/freeCodeCamp/boilerplate-bcrypt/">Glitch</a> или клонируется из <a href="https://github.com/freeCodeCamp/boilerplate-bcrypt/">GitHub</a> . Поскольку хеширование рассчитано на интенсивность вычислений, рекомендуется делать это асинхронно на вашем сервере, чтобы избежать блокировки входящих соединений, пока вы hash. Все, что вам нужно сделать для хэша, асинхронный пароль - это вызов <code>bcrypt.hash(myPlaintextPassword, saltRounds, (err, hash) => { /*Store hash in your db*/ });</code> <hr> Добавьте эту хеширующую функцию на свой сервер (мы уже определили переменные, используемые в этой функции для вас) и запишите ее на консоль, чтобы вы ее увидели! На этом этапе вы обычно сохраняете хэш в своей базе данных. Теперь, когда вам нужно выяснить, являются ли новые данные теми же данными, что и хеш, вы просто используете функцию сравнения <code>bcrypt.compare(myPlaintextPassword, hash, (err, res) => { /*res == true or false*/ });</code> , Добавьте это в свою существующую хеш-функцию (поскольку вам нужно дождаться завершения хеша до вызова функции сравнения) после того, как вы зарегистрируете завершенный хэш и запишите «res» на консоль в сравнении. Вы должны увидеть в консоли хэш, тогда напечатано «true»! Если вы измените «myPlaintextPassword» в функции сравнения на «someOtherPlaintextPassword», тогда он должен сказать false. <pre> bcrypt.hash ('passw0rd!', 13, (err, hash) => {
|
|||
|
console.log (хэш); //$2a$12$Y.PHPE15wR25qrrtgGkiYe2sXo98cjuMCG1YwSI5rJW1DSJp0gEYS
|
|||
|
bcrypt.compare ('passw0rd!', hash, (err, res) => {
|
|||
|
console.log (RES); //правда
|
|||
|
});
|
|||
|
}); </pre> Представьте свою страницу, когда вы думаете, что у вас все в порядке. </section>
|
|||
|
|
|||
|
## Instructions
|
|||
|
<section id="instructions">
|
|||
|
</section>
|
|||
|
|
|||
|
## Tests
|
|||
|
<section id='tests'>
|
|||
|
|
|||
|
```yml
|
|||
|
tests:
|
|||
|
- text: Асинхронный хэш генерируется и правильно сравнивается
|
|||
|
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); })'
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
</section>
|
|||
|
|
|||
|
## Challenge Seed
|
|||
|
<section id='challengeSeed'>
|
|||
|
|
|||
|
</section>
|
|||
|
|
|||
|
## Solution
|
|||
|
<section id='solution'>
|
|||
|
|
|||
|
```js
|
|||
|
// solution required
|
|||
|
```
|
|||
|
</section>
|