#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:
-
создайте дополнительный хук с именем add_payload (или что угодно, что вы хотите) для проверки подлинности службы, используя команду ‘feathers generate hook’
-
внутри /src/service/authentication/index.js добавить в конце экспорта
app.service(‘/auth/ local’).after(hooks.after);
- создать 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: []
};
-
внутри функции перехвата … /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;
};