promise使用password.js验证用户时出现问题
Promisses issue validating a user using password.js
我正在尝试使用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));
应该像这样
相关文章:
- 将jQuery转换为用户脚本的普通Javascript时遇到问题
- 用户使用浏览器时SPA中的问题's的后退或刷新功能
- 当前用户顶部列表的曲目快照出现间歇性问题
- mongodb用户配置文件添加输入时出现问题
- Safari存在文本输入问题,用户输入时会选择文本,导致文本丢失
- 让用户通过javascript访问cookie是一个安全问题
- 解析云代码-在“”中查询用户问题;正常的“;作用
- 敲除-将用户输入添加到表中的问题
- Acrobat DC 应用程序和用户 JavaScript 文件夹问题
- 两个用户通过 websocket 编辑输入时出现问题
- 条带用户令牌问题
- 使用 javascript 创建用户帐户时存在 Firebase 安全问题
- PHP 中的用户时区问题修复
- 我收到一个错误:类型错误:在使用解析 API 更新用户对象时未定义 e.changes.如何解决这个问题
- 在将用户输入转换为图形栏时遇到问题
- MVC - 用户双击“提交”按钮时出现问题
- 通过在 JavaScript 中从用户那里获取值来加载数据子集时出现问题
- 阻止用户在 AJAX 帖子中输入空字符串的问题
- 如何使用WebKit开发工具调试JavaScript中的用户输入问题
- asp.net多用户控制客户端id问题