Как передать параметр для работы в промежуточном программном обеспечении - PullRequest
0 голосов
/ 16 апреля 2019

Итак, я хотел передать параметр промежуточному программному обеспечению, но я борюсь за некоторые моменты.

У меня есть эта функция в обработчике маршрутов:

router.get('/users', auth.required, userController.findAll);

Тогда это будетперейти к функции аутентификации, которая вызывает getTokenFromHeaders:

const auth = {
  required: jwt({
    secret: 'secret',
    userProperty: 'payload',
    getToken: getTokenFromHeaders,
  }),
   ...
};

В функции getTokenFromHeaders токен извлекается и проверяется, это выглядит так:

const getTokenFromHeaders = (req) => {
...
   return token; // Or null in case it's not there or incorrect

Итак, моя цельбыло бы передать параметр, подобный этому auth.required('role'), чтобы проверить роль пользователя внутри getTokenFromHeaders функции (также неплохо было бы определить больше функций авторизации (auth.admin, auth.whothing, ...)

Я уже пытался изменить его следующим образом:

const auth = {
  required: jwt({
    secret: 'secret',
    userProperty: 'payload',
    getToken: getTokenFromHeaders(req, res, role),
  }),

Но он говорит, что req и res не определены.

Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Я думаю, что:

1) Звонок по запросу

app.use('/users', required);

2) Проверка подлинности

const required = (req, res, next) => {
    const auth = {
        required: jwt({
            secret: 'secret',
            userProperty: 'payload',
            getToken: getTokenFromHeaders(req),
        }),
        ...
    };

    if (auth.required) next();
    else // error
}

3) Следующий шаг

router.get('/users', userController.findAll);

4) userController.findAll

userController.findAll отправит ответ с восстановленными параметрами (req и res)

0 голосов
/ 16 апреля 2019

get метод получает путь и 2 обратных вызова, где первый является промежуточным ПО:

router.get('/users', auth, userController.findAll);

Промежуточное ПО похоже на findAll функцию и выполняется до:

var auth = function (req, res) {
    // Get token from header (http://expressjs.com/en/api.html#req.get)
    var token = req.get("myToken");

    // TODO Validate token:
    var isValid = someFunction(token);
    if (!isValid) {
        // ************
        // TODO Check if user can access this resource
        // ************
        res.json("not authorized");
    }

    // Go to findAll (next callback)
};

Я предлагаю вам взглянуть на документы , особенно на app.use , чтобы лучше понять, как работает промежуточное ПО в экспрессе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...