Bookshelf.js - 如何只为一个查询获取 'hidden' 字段?
Bookshelf.js - How to get 'hidden' fields for one query only?
我有以下书架模型:
Bookshelf.model.extend({
tableName: 'users',
hidden: ['password']
}, {
async getBy(filter) {
return await this.query({where: filter}).fetch();
}
})
如您所见,字段 password
是隐藏的(因为我通常不希望它显示)。
但是,我需要它来连接我的用户(在进行哈希比较时):
const user = await userModel.getBy({email: req.body.email});
if (await bcrypt.compare(req.body.password, user.password)) {
// here user.password is undefined because it is hidden
}
有没有一种方法可以快捷地查看可见性插件并获取密码,而无需直接使用 knex
(Bookshelf.knex.raw()
) 之类的操作?
此致,
好的,既然我找到了解决方案,我会回答我自己的问题,希望它能帮助一些人:
14 天前 (30/06/2017),问题 #1379 已被合并。
它提供了以下功能:
Adds ability to override options specified during forging with the options specified to toJSON directly.
Here 是提交,测试显示它是如何工作的。
对于我的情况,我执行以下操作:
const user = (await userModel.getBy({email: req.body.email})).toJSON({hidden: []});
hidden
是一个空数组,所以它会覆盖之前隐藏的属性(hidden: ['password']
),得到要显示的密码
我有以下书架模型:
Bookshelf.model.extend({
tableName: 'users',
hidden: ['password']
}, {
async getBy(filter) {
return await this.query({where: filter}).fetch();
}
})
如您所见,字段 password
是隐藏的(因为我通常不希望它显示)。
但是,我需要它来连接我的用户(在进行哈希比较时):
const user = await userModel.getBy({email: req.body.email});
if (await bcrypt.compare(req.body.password, user.password)) {
// here user.password is undefined because it is hidden
}
有没有一种方法可以快捷地查看可见性插件并获取密码,而无需直接使用 knex
(Bookshelf.knex.raw()
) 之类的操作?
此致,
好的,既然我找到了解决方案,我会回答我自己的问题,希望它能帮助一些人:
14 天前 (30/06/2017),问题 #1379 已被合并。
它提供了以下功能:
Adds ability to override options specified during forging with the options specified to toJSON directly.
Here 是提交,测试显示它是如何工作的。
对于我的情况,我执行以下操作:
const user = (await userModel.getBy({email: req.body.email})).toJSON({hidden: []});
hidden
是一个空数组,所以它会覆盖之前隐藏的属性(hidden: ['password']
),得到要显示的密码