FeathersJs - 清理用户服务中 Find 方法的响应破坏了身份验证服务
FeathersJs - Sanitize response from Find method in users service broke Authentication service
我在用户服务中创建了一个 after 挂钩,它应该清理来自“find”方法的响应,但它破坏了身份验证服务。
after hook 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 文件中的任何内容。
我想知道我做错了什么?有没有更好的方法来清理响应?
谢谢你帮助我!
身份验证流程需要能够检索完整的用户信息以将其添加到请求、比较密码等。您可能想跳过 sanitizeResponse
hook for internal calls(当 context.params.provider
为 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};
}
};
我在用户服务中创建了一个 after 挂钩,它应该清理来自“find”方法的响应,但它破坏了身份验证服务。
after hook 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 文件中的任何内容。
我想知道我做错了什么?有没有更好的方法来清理响应?
谢谢你帮助我!
身份验证流程需要能够检索完整的用户信息以将其添加到请求、比较密码等。您可能想跳过 sanitizeResponse
hook for internal calls(当 context.params.provider
为 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};
}
};