Авторизовать сервис FeathersJs на основе области Auth0 - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть пользовательский сервис в моем APIs.s.s.Я хочу сделать метод поиска доступным только для аутентифицированных пользователей, которые прочитали: область действия пользователя установлена.

Я использую express-jwt в качестве промежуточного программного обеспечения для аутентификации.Я попытался использовать express-jwt-authz для авторизации, но не могу, поскольку req недоступен внутри хука.Библиотека express-jwt устанавливает области действия в req.user

Использование Промежуточное ПО аутентификации JWT аутентифицирует вызывающих абонентов с помощью JWT.Если токен действителен, для req.user будет установлен объект JSON, декодированный для последующего использования промежуточным программным обеспечением для авторизации и контроля доступа.

Есть ли способ получить доступ к областям в access_tokenвнутри крючка?

Я хочу иметь возможность сделать что-то вроде этого:

module.exports = {
  before: {
    all: [],
    find: [ authorize(['read:users']) ],
    get: [ authorize(['read:users'])],
    create: [ authorize(['write:users']) ],
    update: [ authorize(['write:users'])   ],
    patch: [ authorize(['write:users'])  ],
    remove: [ authorize(['write:users'])  ]
  }
};

1 Ответ

0 голосов
/ 28 сентября 2018

Решил это, добавив промежуточное ПО, которое добавляет данные req.user в req.feathers.scope.

мой src/middleware/index.js файл

const addUserToReq = function(req, res, next) {
  req.feathers.user = req.user; next();
};

module.exports = function (app) {
  app.use(checkJwt); // express-jwt logic
  app.use(addUserToReq);
};

, а затем внутри хука я могу получить доступэта информация, как это

module.exports = function(expectedScopes) {
  return context => {
      let scopes = context.params.user.scope;
    }
  };
};
...