2016-11-04 7 views
-1

Я использую библиотеку yortus 'async/await node.js для настройки системы входа/регистрации на основе паспорта с использованием хэшей паролей с использованием bcrypt-nodejs.Настройка bcrypt для работы с паспортом и асинхронным ожиданием Библиотека Node.js

В то время как остальная часть системы настроена и работает нормально, у меня возникают проблемы при получении bcrypt-nodejs к хорошо работать с yortus' async/await потому что Bcrypt хеширования подписи функции требует двух обратных вызовов, и это не ясно, как использовать его с async/await. ..

hash(data, salt, progress, cb) 
    data - [REQUIRED] - the data to be encrypted. 
    salt - [REQUIRED] - the salt to be used to hash the password. 
    progress - a callback to be called during the hash calculation to signify progress 
    callback - [REQUIRED] - a callback to be fired once the data has been encrypted. 
     error - First parameter to the callback detailing any errors. 
     result - Second parameter to the callback providing the encrypted form. 

async/await звонок ...

let generateHash = async((password) => { 
    let salt = await(bcrypt.genSaltAsync(10)) // this works 
    let result = await(bcrypt.hash(password, salt, null) 
    return result // returns NULL 
}) 

Выход:

Unhandled rejection No callback function was given. 

запись базы данных (MongoDB) при попытке подписаться с помощью системы:

{ 
    "_id" : ObjectId("581bf7031386f167a09851b9"), 
    "username" : "vjk2005", 
    "password" : "" 
} 

Имя пользователя проходит, но пароль NULL. Я пробовал несколько перестановок и комбинаций без успеха, любая помощь приветствуется.

ответ

1

Я предлагаю просто использовать babel с правильным ключевым словом async/await или флагом --harmony-async-await на узле 7. Сделает код более чистым, и я думаю, что очень немногие люди используют эту библиотеку. Они взяли эту идею и превратили ее в часть языка.

Даже если вы используете эту библиотеку, для нее требуются обещающие функции, а не функции обратного вызова. Вы можете использовать модуль pify или найти обещанный bcrypt. Всегда выполняйте поиск на npmjs.com или npms.io. Найдите «обещание bcrypt».

import {hash} from 'bcrypt-as-promised'; 

const generateHash = async password => await hash(password, 10); 

generateHash('abc1234').then(console.log).catch(console.error); 

Или, так как вы можете осуществлять автоматическую генерацию соли, как, что вы могли бы упростить его:

import {hash} from 'bcrypt-as-promised'; 

hash('abc123',10).then(console.log).catch(console.error); 
+0

Я на самом деле с помощью Bluebird в promisify в Bcrypt LIB. Я резервирую гармонию и babel как последнее средство. – vjk2005

 Смежные вопросы

  • Нет связанных вопросов^_^