【问题标题】:No callback provided to pbkdf2没有向 pbkdf2 提供回调
【发布时间】:2015-03-18 19:29:53
【问题描述】:

我有这段代码,它在我的开发计算机上运行良好,但在服务器上却不行。

db.admin.verify([req.body.username]).then(function(data){
    if (data[0].length == 0){       //if there is no user with that username
        console.log("bad username");
        res.status(401).send('Incorrect username or password');
    }

    var creds = data[0][0];

    return myCrypt.pbkdf2(req.body.password, creds.salt).then(function(key){
        if (creds.password === key.toString('base64')){            //correct password
            console.log("correct pw");
            return db.admin.getUser([req.body.username])
        } else {
            console.log("bad pw");
            res.status(401).send('Incorrect password or username');
        }
    });
}).then(function(dbData){
    var user = dbData[0][0];
    var profile = {
        firstName: user.firstName,
        lastName: user.lastName,
        email: user.email,
        username: user.username,
        type: user.type,
        id: user.adminId
    };

    var token = jwt.sign(profile, 'secrets');

    res.json({token:token, user: profile});
}).catch(function(err){
    console.log('ERROR');
    console.log(err);
    throw err;
    res.status(500).json(err);
});

它应该通过比较哈希值来验证数据库中的用户。 我正在使用包装在 Q 承诺中的 pbkdf2 的 node.js 加密库实现。

module.exports.pbkdf2 = function(password, salt) {

    var pbkdf2 = Q.denodeify(crypto.pbkdf2);

    return pbkdf2(password, salt, 4096, 512, 'sha512')
};

当我尝试在服务器上运行它时,它返回 [Error: No callback provided to pbkdf2],从 promise 的 catch 函数中捕获。

我尝试将整个项目从开发复制到服务器,以防万一我没有安装任何依赖项,但仍然抛出错误。

【问题讨论】:

  • 32 位节点的 crypto.pbkdf2 似乎是一个问题。即使来自the node docs 的示例在我的 32 位服务器上也失败并出现相同的错误。我只有一台 32 位计算机来测试它,但我无法在我的任何其他计算机上重现它,所以它看起来像是硬件/平台相关的
  • 在 64 位 intel i5 计算机上也会出现问题,但节点版本是 32 位。绝对是 32 位节点的问题,因为用 64 位版本替换二进制文件解决了这个问题。

标签: node.js express q pbkdf2


【解决方案1】:

原来 pbkdf2 函数签名在节点 0.10 和 0.12 之间中断,并且它没有收到回调,因为我传递的是摘要而不是函数回调。将 nodejs 更新到 0.12 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-22
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2014-02-16
    • 2018-09-26
    • 2017-08-13
    相关资源
    最近更新 更多