javascript - 设置 bcrypt 以与 Passport 和 async-await Node.js 库配合使用

标签 javascript node.js asynchronous passport.js bcrypt

我正在使用 yortus' async/await node.js 库,用于设置基于 Passport 的登录/注册系统,其密码使用 bcrypt-nodejs 进行哈希处理。 .

虽然系统的其余部分已设置并正常运行,但我在使 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。我尝试了多种排列和组合,但没有成功,感谢您的帮助。

最佳答案

我建议在 Node 7 上仅将 babel 与常规 async/await 关键字或 --harmony-async-await 标志一起使用。使代码更简洁,我认为很少有人使用该库。他们采纳了这个想法并将其变成了语言的一部分。

即使您使用该库,它也需要 promise 的函数而不是使用回调的函数。您可以使用 pify 模块或查找 promisified bcrypt。始终在 npmjs.com 或 npms.io 上搜索。搜索“bcrypt Promise”。

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);

关于javascript - 设置 bcrypt 以与 Passport 和 async-await Node.js 库配合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414629/

相关文章:

javascript - 如何根据购物车总数显示消息

javascript - 通过 JQuery 填充菜单

javascript - 获取提交到服务器的 AJAX 请求返回的数据

node.js - [tokio-rs] [文档]具有共享状态示例的多个异步 “sub-apps”?

javascript - 从nodejs中的mongoDB查询返回数据

c# - 在使用 async/await 进行请求时为多个函数调用返回相同的值

javascript - 用于映射和过滤的 FlatMap vs Reduce - 一个比另一个推荐吗?

javascript - 在 jquery.click 上运行的单击函数?

javascript - 使用事件流结束处理流

javascript - 如何将数据从 Promise 推送到数组