Files

3.4 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
58a25bcff9fc0f352b528e7e Синхронне перетворення паролів на дані та їх порівняння 2 301579 hash-and-compare-passwords-synchronously

--description--

Нагадуємо, що цей проект створюється на основі наступного початкового проекту на Replit або копіюється з GitHub.

Синхронне перетворення паролів на дані (хешування) легко виконати, однак це може спричинити затримку, якщо використовувати його на серверній стороні з високою вартістю або з хешуванням, яке проводиться дуже часто. Перетворення таким методом так само легко виконати як і ввести

var hash = bcrypt.hashSync(myPlaintextPassword, saltRounds);

Додайте цей метод хешування до свого коду і потім виведіть результат на консоль. Знову ж таки, змінні, що використовуються, вже визначені на сервері, тому вам не потрібно їх змінювати. Ви можете помітити, що незважаючи на те, що ви хешуєте ті самі паролі як і в асинхронному методі, результат на консолі відрізняється. Це пов'язано з випадково згенерованим модифікатором (сіль) кожного разу як створюються перші 22 символи в третьому рядку хешу. Щоб порівняти вхідний пароль з новим синхронним хешом, використайте метод compareSync:

var result = bcrypt.compareSync(myPlaintextPassword, hash);

з результатом буде логічне значення true або false.

--instructions--

Додайте функцію і увійдіть в консоль щоб побачити, як вона працює.

Підтвердіть вашу сторінку, якщо все зрозуміло.

--hints--

Синхронне хешування необхідно правильно згенерувати і правильно синхронізувати.

(getUserInput) =>
  $.get(getUserInput('url') + '/_api/server.js').then(
    (data) => {
      assert.match(
        data,
        /START_SYNC[^]*hash.*=.*bcrypt.hashSync.*myPlaintextPassword( |),( |)saltRounds[^]*END_SYNC/gi,
        'You should call bcrypt.hashSync on myPlaintextPassword with saltRounds'
      );
      assert.match(
        data,
        /START_SYNC[^]*result.*=.*bcrypt.compareSync.*myPlaintextPassword( |),( |)hash[^]*END_SYNC/gi,
        'You should call bcrypt.compareSync on myPlaintextPassword with the hash generated in the last line'
      );
    },
    (xhr) => {
      throw new Error(xhr.statusText);
    }
  );

--solutions--

/**
  Backend challenges don't need solutions, 
  because they would need to be tested against a full working project. 
  Please check our contributing guidelines to learn more.
*/