2017-07-11 5 views
2

私は、次の本棚のモデルがあります:Bookshelf.js - 1つのクエリに対してのみ非表示のフィールドを取得する方法

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 
} 

は直接knexBookshelf.knex.raw()を使用してのようなものを行うことなく、視認性のプラグインをショートカットとパスワードを取得する方法はあります)?

私は解決策を見つけたので、

敬具、

答えて

2

OK、私は自分の質問にお答えしますし、私はそれはいくつかの人々を助けることを願っています:

14日前(30/06/2017 )、問題#1379がマージされました。

それは次のようfunctionnality提供:

は直接toJSONに指定したオプションと鍛造時に指定したオプションを無効にする機能を追加します。

Hereは、どのように動作するかを示すテストです。私の場合のために

、私は次のようにします。それは、以前の隠されたプロパティ(hidden: ['password'])をオーバーライドして、パスワードが表示されるために得るよう

const user = (await userModel.getBy({email: req.body.email})).toJSON({hidden: []});

hiddenは、空の配列です。

関連する問題