promise使用password.js验证用户时出现问题

Promisses issue validating a user using password.js

本文关键字:问题 用户 验证 使用 password js promise      更新时间:2023-09-26

我正在尝试使用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));
    }))

1234 password$2a$05$F/QwjSo/DImWaUzv8nl4g.LqPKAcXhiBaiXGbRIN/k44dgD5nZ/9C is bcrypt哈希值。

下面是验证过程中使用的函数。

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的结果是假的。

我发现哪里不对了。

.then(() = > varifyPassword(password, '$2a$05$F/QwjSo/DImWaUzv8nl4g.LqPKAcXhiBaiXGbRIN/k44dgD5nZ/9C'))
            .then(() => callback(null, true))
            .catch(err => callback(null, false));

应该像这样