【问题标题】:Adding non user field to payload for use in JWT token将非用户字段添加到有效负载以在 JWT 令牌中使用
【发布时间】:2017-02-08 06:32:23
【问题描述】:

您好,我希望在身份验证过程中向有效负载添加一个非用户字段,以便可以包含在 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

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

【问题讨论】:

    标签: javascript node.js jwt feathersjs feathers-authentication


    【解决方案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')
          ]
        }
      });
    

    【讨论】:

      【解决方案2】:
      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; };

      【讨论】:

        【解决方案3】:

        查看this PR:

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

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

        【讨论】:

          猜你喜欢
          • 2016-05-03
          • 2017-10-24
          • 1970-01-01
          • 2020-08-15
          • 2018-11-18
          • 2019-10-29
          • 1970-01-01
          • 2018-09-15
          • 2020-12-26
          相关资源
          最近更新 更多