「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 ファイルで何も変更していません。
私は何が間違っているのか知りたいですか?応答をサニタイズするより良い方法はありますか?
助けてくれてありがとう!