1

嗨,我希望在身份验证过程中向有效负载添加一个非用户字段,以便我可以包含在 JWT 令牌中。

请求是这样的:

{ "scriptId": "script1", "password": "password", "userName": "user1" }

配置是这样的:

  "auth": {
    "local": {
      "usernameField" : "scriptId"
    },
    "token": {
      "secret": "mysecret",
      "payload": ["scriptId","userName"],
      "expiresIn": "10min"
    },
    "successRedirect": "/chat.html"
  }

如何传递 userName 参数,以便我可以在 auth/token 服务的 before 钩子中检索它,以便我可以将它传递给 hook.data

或者,如果有更好的方法,请告诉我。

4

3 回答 3

1

您可以通过以下方式添加它

app.service('authentication').hooks({
    before: {
      create: [
        authentication.hooks.authenticate(config.strategies),
        function (hook) {
         hook.params.payload = {
            userId: hook.params.user.userId,
            accountId: hook.params.user.accountId
          };
          return Promise.resolve(hook);
        }
      ],
      remove: [
        authentication.hooks.authenticate('jwt')
      ]
    }
  });
于 2017-09-25T08:21:36.100 回答
1

检查此公关:

// default.json
{
  "auth": {
    "extraFields": [
      "email",
      "roles"
    ]
  }
}

extraFields是您的用户对象的字段名。因此,进入 JWT 的数据需要由您的用户端点提供。

于 2016-09-30T14:16:17.000 回答
0
  1. 使用命令'feathers generate hook'创建一个名为add_payload(或任何你想要的)的后钩子用于服务身份验证

  2. 在 /src/service/authentication/index.js 里面添加导出的末尾

app.service('/auth/local').after(hooks.after);

  1. 在 /src/service/authentication/hooks 中创建 index.js 文件,内容应如下所示:

'use strict' const addPayload = require('./add_payload'); const globalHooks = require('../../../hooks'); const hooks = require('feathers-hooks'); exports.after = { all: [addPayload()], find: [], get: [], create: [], update: [], patch: [], remove: [] };

  1. 在钩子函数里面... /src/service/authentication/hooks/add_payload.js

    return function(hook) { hook.result.aa = "xyz"; // add whatever you want to the return here... hook.addPayload = true; };

于 2016-11-04T05:48:02.303 回答