Saya membuat kait setelah di layanan pengguna yang harus membersihkan respons dari metode "temukan" dan itu merusak layanan otentikasi.

Kait setelah sanitizeResponse harus memverifikasi apakah kueri terkait dengan email atau cpf, dan, jika ya, harus menghapus beberapa bidang dan menambahkan beberapa bidang baru.

Inilah 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: []
  }
};

Sebelum menulis kait ini, otentikasi berfungsi dengan baik, tetapi setelah itu mulai mengirimi saya tanggapan "Tidak diautentikasi".

Saya belum mengubah apa pun di file user.class.js dan otentikasi.js yang dihasilkan oleh feathersjs-cli.

Saya ingin tahu apa yang saya lakukan salah? Apakah ada cara yang lebih baik untuk membersihkan respon ?

Terima kasih sudah membantu saya!

1
Rodrigo Ramalho 3 September 2020, 09:58

1 menjawab

Jawaban Terbaik

Alur otentikasi harus dapat mengambil informasi pengguna lengkap untuk menambahkannya ke permintaan, membandingkan kata sandi, dan lainnya. Anda mungkin ingin melewati sanitizeResponse kait untuk panggilan internal ( ketika context.params.provider adalah undefined):

const sanitizeResponse = (context) => {
  const query = context.params.query;
  if(!context.params.provider || (!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};
  }
};
1
Daff 3 September 2020, 18:05