Node.js 更改注册用户的JSON响应
在用户服务中创建用户后,如何在FeathersJS中创建一个钩子,在JSON响应中返回带有用户对象的JWT令牌 我在users.hooks.js中尝试过:Node.js 更改注册用户的JSON响应,node.js,feathersjs,Node.js,Feathersjs,在用户服务中创建用户后,如何在FeathersJS中创建一个钩子,在JSON响应中返回带有用户对象的JWT令牌 我在users.hooks.js中尝试过: after: { all: [ // Make sure the password field is never sent to the client // Always must be the last hook protect('password')
after: {
all: [
// Make sure the password field is never sent to the client
// Always must be the last hook
protect('password')
],
find: [],
get: [],
create: [
function(hook) {
const data = {
email: hook.data.email,
password: hook.data.password,
strategy: 'local'
};
return hook.app.service('authentication').create(data).then(page => {
page.user = hook.result;
hook.result = page;
return Promise.resolve(hook);
});
}
],
update: [],
patch: [],
remove: []
},
但是JSON响应保持不变。可以编辑FeathersJS身份验证模块吗?我在尝试操作
context.result
(hook.result
在您的情况下。您应该将其命名为context
)
在我的理解中,hook.result
是对从服务返回的实际对象的引用。因此,您可以随意操作该对象
但是,在您的情况下,您没有更改实际的结果
对象,而是获取另一个对象-页面
,对其进行操作,然后更改钩子.result
以引用该新对象页面
。未更改的实际结果
hook.result = page;
上面这行是你的错误。你应该做的是:
hook.result.accessToken=page.accessToken
这样就可以操纵实际的响应对象
我会这样写你的函数:
然后,响应JSON将具有
accessToken
属性。我在尝试操作context.result
时遇到了类似的问题(hook.result
在您的情况下。您应该将其命名为context
)
在我的理解中,hook.result
是对从服务返回的实际对象的引用。因此,您可以随意操作该对象
但是,在您的情况下,您没有更改实际的结果
对象,而是获取另一个对象-页面
,对其进行操作,然后更改钩子.result
以引用该新对象页面
。未更改的实际结果
hook.result = page;
上面这行是你的错误。你应该做的是:
hook.result.accessToken=page.accessToken
这样就可以操纵实际的响应对象
我会这样写你的函数:
然后,响应JSON将具有
accessToken
属性。要创建用户并添加令牌,需要考虑以下几点:
hook.data.password
将是散列密码。维护原始登录信息的最佳方法是在hashPassword
之前添加一个钩子,该钩子添加了params.login
属性:
const setLogin=options=>{
返回上下文=>{
const{data}=上下文
context.params.login = {
strategy: 'local',
email: data.email,
password: data.password
};
return context;
});
};params.login
创建登录名。authentication
服务还需要原始请求中的params
:
const addAccessToken=()=>{
返回异步上下文=>{
const{login}=context.params
const jwt = await context.app.service('authentication')
.create(login, context.params);
context.result.accessToken = jwt.accessToken;
return context;
});
};users.hooks.js
文件类似于以下内容:
module.exports = {
before: {
all: [],
find: [ authenticate('jwt') ],
get: [ authenticate('jwt') ],
create: [ setLogin(), hashPassword(), gravatar() ],
update: [ hashPassword(), authenticate('jwt') ],
patch: [ hashPassword(), 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: [],
get: [],
create: [ addAccessToken() ],
update: [],
patch: [],
remove: []
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
}
};
要创建用户并添加令牌,需要考虑以下几点:
hook.data.password
将是散列密码。维护原始登录信息的最佳方法是在hashPassword
之前添加一个钩子,该钩子添加了params.login
属性:
const setLogin=options=>{
返回上下文=>{
const{data}=上下文
context.params.login = {
strategy: 'local',
email: data.email,
password: data.password
};
return context;
});
};params.login
创建登录名。authentication
服务还需要原始请求中的params
:
const addAccessToken=()=>{
返回异步上下文=>{
const{login}=context.params
const jwt = await context.app.service('authentication')
.create(login, context.params);
context.result.accessToken = jwt.accessToken;
return context;
});
};users.hooks.js
文件类似于以下内容:
module.exports = {
before: {
all: [],
find: [ authenticate('jwt') ],
get: [ authenticate('jwt') ],
create: [ setLogin(), hashPassword(), gravatar() ],
update: [ hashPassword(), authenticate('jwt') ],
patch: [ hashPassword(), 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: [],
get: [],
create: [ addAccessToken() ],
update: [],
patch: [],
remove: []
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
}
};