自定义登录响应¶
FeatusJS的Auk版本包括一个强大的新的 认证 建立在 PassportJS 之上.新插件非常灵活,允许您自定义几乎所有内容.这种灵活性需要做出一些改变.在本指南中,我们将查看登录响应的更改以及如何自定义它.
登录响应的更改¶
以前版本的 feathers-authentication 总是返回相同的响应.它看起来像这样:
{
token: '<the jwt token>',
user: {
id: 1,
email: 'my@email.com'
}
}
JWT还包含一个有效负载,其中包含一个表示用户 id 的 id 属性.我们发现这对我们的一些技术性应用来说过于严格.例如,如果您想要验证设备而不是用户,该怎么办?或者,如果您要对设备**和**用户进行身份验证,该怎么办?旧插件无法处理这些情况.新的那个.为了使其工作,我们首先简化了响应.现在,默认响应如下所示:
{
accessToken: '<the jwt token>'
}
JWT还包含一个具有 userId 属性的有效负载.
基于以上所述,您可以看到我们默认仍然会对 user 进行身份验证.在这种情况下,``user`` 就是我们所说的 entity.它是经过身份验证的通用名称.它是可定制的,但本指南未涉及.相反,让我们关注在登录响应中添加用户所需的内容.
自定义登录响应¶
/authentication 端点现在是Feathers服务.它使用 create 方法进行登录,使用 remove 方法进行注销.就像所有Feathers服务一样,您可以使用 ../api/hooks 自定义响应.对于我们想要做的事情,重要的部分是 context.result,它成为了响应体.我们可以使用 after 钩子来定制 context.result 以返回我们想要的任何内容:
app.service('/authentication').hooks({
after: {
create: [
context => {
context.result.foo = 'bar';
}
]
}
});
成功登录后, context.result 已经包含 accessToken.上面的示例将响应修改为如下所示:
{
accessToken: '<the jwt token>',
foo: 'bar'
}
访问用户实体¶
让我们看看如何在响应中包含 user,就像在以前的版本中一样. /authentication 服务修改 context.params 对象以包含实体对象(在本例中为 user).有了这些信息,您可能已经想出了如何让用户进入响应.它只需要从 context.params.user 复制到 context.result.user:
app.service('/authentication').hooks({
after: {
create: [
context => {
context.result.user = context.params.user;
// Don't expose sensitive information.
delete context.result.user.password;
}
]
}
});
此时,响应现在包括 accessToken 和 user.现在,客户端不必另外请求 user 数据. 如上例所示,请务必不要泄露任何敏感信息.
包起来¶
您现在已经了解了新的 feathers-authentication 插件中的一些差异.它不使用两个端点,而是使用单个服务.与之前相比,它还具有简化的响应.现在,您可以自定义响应以包含所需的任何信息.