我正在尝试使用passport.js和ES6
创建验证这是我的验证功能
passport.use(new BasicStrategy(
function(login, password, callback) {
User.findOne({ login: login }).select('_id roles')
.populate({ path: 'roles', select: 'name userPermissionsBitMask' })
.then(entity => checkIfUserHasAdminPerms(entity))
.then(varifyPassword(password, '$2a$05$F/QwjSo/DImWaUzv8nl4g.LqPKAcXhiBaiXGbRIN/k44dgD5nZ/9C'))
.then(() => callback(null, true))
.catch(err => callback(null, false));
}))
$2a$05$F/QwjSo/DImWaUzv8nl4g.LqPKAcXhiBaiXGbRIN/k44dgD5nZ/9C is bcrypt
的 1234 password
哈希值。
这是我在验证期间使用的函数。
function checkIfUserHasAdminPerms(roles) {
return new Promise((resolve, reject) => {
let foundRole = _.find(entity.roles, role => role.name === 'am')
foundRole ? resolve(foundRole) : reject(new HttpError(NOT_FOUND_ERROR_CODE, 'Not found'));
});
}
function varifyPassword(password, hash) {
return new Promise((resolve, reject) =>
bcrypt.compare(password, hash, (err, result) => {
if (err) {
return reject(err);
}
return result ? resolve() : reject();
})
);
}
我们的想法是在角色名称为am的数据库中查找用户,如果出现此角色,请尝试验证用户名/护照,否则 - 停止此步骤的验证。
在我看来,我做了一些错误的承诺,好像我输入123密码路由就像验证成功通过一样,但不应该这样,因为密码不正确。我检查了varifyPassword
函数,如果是密码123,结果为false。
答案 0 :(得分:0)
我发现了什么问题。
.then(() = > varifyPassword(password, '$2a$05$F/QwjSo/DImWaUzv8nl4g.LqPKAcXhiBaiXGbRIN/k44dgD5nZ/9C'))
.then(() => callback(null, true))
.catch(err => callback(null, false));
应该是这样的