FeathersJs — Очистка ответа от метода поиска в службе пользователей нарушила службу аутентификации

#feathersjs #feathers-sequelize #feathers-authentication #feathers-hook #feathers-service

#feathersjs #feathers-продолжить #feathers-аутентификация #feathers-крюк #feathers-service

Вопрос:

Я создал в службе пользователей перехват after, который должен очистить ответ от метода «find», и это нарушило службу аутентификации.

После перехвата 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 amp;amp; !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: []
  }
};

  

До написания этого перехвата аутентификация работала просто отлично, но после этого она начала отправлять мне ответы «Не прошедший проверку подлинности».

Я ничего не изменил в user.class.js и authentication.js файл, сгенерированный feathersjs-cli.

Я хотел бы знать, что я делаю не так? Есть ли лучший способ очистить ответ?

Спасибо, что помогли мне!

Ответ №1:

Поток аутентификации должен иметь возможность извлекать полную информацию о пользователе, чтобы добавлять ее в запросы, сравнивать пароли и многое другое. Вероятно, вы захотите пропустить sanitizeResponse перехват для внутренних вызовов (когда context.params.provider есть undefined ):

 const sanitizeResponse = (context) => {
  const query = context.params.query;
  if(!context.params.provider || (!query.email amp;amp; !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};
  }
};
  

Комментарии:

1. Спасибо, что помогли мне, ваше объяснение было действительно полезным!