1

「find」メソッドからの応答をサニタイズするアフター フックをユーザー サービスに作成したところ、認証サービスが壊れてしまいました。

after フックsanitizeResponseは、クエリが電子メールまたは cpf に関するものかどうかを確認し、そうである場合は、いくつかのフィールドを削除していくつかの新しいフィールドを追加する必要があります。

これがusers.hooks.jsです

const { authenticate } = require('@feathersjs/authentication').hooks;

const {
  // eslint-disable-next-line no-unused-vars
  hashPassword, protect
} = require('@feathersjs/authentication-local').hooks;

const sanitizeResponse = (context) => {
  const query = context.params.query;
  if(!query.email && !query.cpf)
    return context;
  
  if(context.result.total){
    context.result.data[0] = {exists: 1, id: context.result.data[0].id};
  }else{
    context.result.data[0] = {exists: 0};
  }
};

module.exports = {
  before: {
    all: [],
    find: [authenticate('jwt')],
    get: [ authenticate('jwt') ],
    create: [ hashPassword('password') ],
    update: [ hashPassword('password'),  authenticate('jwt') ],
    patch: [ hashPassword('password'),  authenticate('jwt') ],
    remove: [ authenticate('jwt') ]
  },

  after: {
    all: [ 
      // Make sure the password field is never sent to the client
      // Always must be the last hook
      protect('password')
    ],
    find: [sanitizeResponse],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  },

  error: {
    all: [],
    find: [],
    get: [],
    create: [],
    update: [],
    patch: [],
    remove: []
  }
};

このフックを作成する前は、認証は正常に機能していましたが、その後、「認証されていません」という応答が送信されるようになりました。

私は、feathersjs-cli によって生成された user.class.js および authentication.js ファイルで何も変更していません。

私は何が間違っているのか知りたいですか?応答をサニタイズするより良い方法はありますか?

助けてくれてありがとう!

4

1 に答える 1