没有回调提供给 pbkdf2
No callback provided to pbkdf2
我有这段代码,它在我的开发计算机上运行良好,但在服务器上运行不正常。
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);
});
它应该通过比较哈希来验证数据库中的用户。
我正在使用 node.js 包装在 Q promise 中的 pbkdf2 加密库实现。
module.exports.pbkdf2 = function(password, salt) {
var pbkdf2 = Q.denodeify(crypto.pbkdf2);
return pbkdf2(password, salt, 4096, 512, 'sha512')
};
当我在服务器上尝试 运行 它时,它 returns [Error: No callback provided to pbkdf2]
,被 promises catch 函数捕获。
我已经尝试将我的整个项目从开发复制到服务器,以防万一我没有安装任何依赖项,但仍然会抛出错误。
事实证明,pbkdf2 函数签名在节点 0.10 和 0.12 之间中断,并且它没有收到回调,因为我传递的是摘要而不是函数回调。将 nodejs 更新到 0.12 解决了这个问题。
我有这段代码,它在我的开发计算机上运行良好,但在服务器上运行不正常。
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);
});
它应该通过比较哈希来验证数据库中的用户。 我正在使用 node.js 包装在 Q promise 中的 pbkdf2 加密库实现。
module.exports.pbkdf2 = function(password, salt) {
var pbkdf2 = Q.denodeify(crypto.pbkdf2);
return pbkdf2(password, salt, 4096, 512, 'sha512')
};
当我在服务器上尝试 运行 它时,它 returns [Error: No callback provided to pbkdf2]
,被 promises catch 函数捕获。
我已经尝试将我的整个项目从开发复制到服务器,以防万一我没有安装任何依赖项,但仍然会抛出错误。
事实证明,pbkdf2 函数签名在节点 0.10 和 0.12 之间中断,并且它没有收到回调,因为我传递的是摘要而不是函数回调。将 nodejs 更新到 0.12 解决了这个问题。