自定义登录响应

FeatusJS的Auk版本包括一个强大的新的 认证 建立在 PassportJS 之上.新插件非常灵活,允许您自定义几乎所有内容.这种灵活性需要做出一些改变.在本指南中,我们将查看登录响应的更改以及如何自定义它.

登录响应的更改

以前版本的 feathers-authentication 总是返回相同的响应.它看起来像这样:

{
  token: '<the jwt token>',
  user: {
    id: 1,
    email: 'my@email.com'
  }
}

JWT还包含一个有效负载,其中包含一个表示用户 idid 属性.我们发现这对我们的一些技术性应用来说过于严格.例如,如果您想要验证设备而不是用户,该怎么办?或者,如果您要对设备**和**用户进行身份验证,该怎么办?旧插件无法处理这些情况.新的那个.为了使其工作,我们首先简化了响应.现在,默认响应如下所示:

{
  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;
      }
    ]
  }
});

此时,响应现在包括 accessTokenuser.现在,客户端不必另外请求 user 数据. 如上例所示,请务必不要泄露任何敏感信息.

包起来

您现在已经了解了新的 feathers-authentication 插件中的一些差异.它不使用两个端点,而是使用单个服务.与之前相比,它还具有简化的响应.现在,您可以自定义响应以包含所需的任何信息.