Добавление непользовательского поля в полезную нагрузку для использования в токене JWT

#javascript #node.js #jwt #feathersjs #feathers-authentication

#javascript #node.js #jwt #feathersjs #перья-аутентификация

Вопрос:

Привет, я хочу добавить непользовательское поле в полезную нагрузку в процессе аутентификации, чтобы я мог быть включен в токен JWT.

Запрос выглядит следующим образом:

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

конфигурация выглядит следующим образом:

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

Как я могу передать параметр userName, чтобы я мог получить его в before hook службы auth / token, чтобы я мог передать его в hook.data

Или, если есть лучший способ сделать это, просто дайте мне знать.

Ответ №1:

Проверьте этот PR:

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

Это имена extraFields полей вашего пользовательского объекта. Таким образом, данные, которые поступают в JWT, должны предоставляться вашей конечной точкой пользователя.

Ответ №2:

вы можете добавить это следующим образом

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

Ответ №3:

  1. создайте дополнительный хук с именем add_payload (или что угодно, что вы хотите) для проверки подлинности службы, используя команду ‘feathers generate hook’

  2. внутри /src/service/authentication/index.js добавить в конце экспорта

app.service(‘/auth/ local’).after(hooks.after);

  1. создать index.js файл в /src/service/authentication/ hooks, содержимое должно выглядеть следующим образом:

'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;
    };