使用password.js

时间:2016-10-26 10:25:21

标签: javascript node.js validation passport.js es6-promise

我正在尝试使用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。

1 个答案:

答案 0 :(得分:0)

我发现了什么问题。

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

应该是这样的