Функция между маршрутом и обработчиком маршрута не выполняется должным образом - PullRequest
1 голос
/ 16 марта 2019

Я пытаюсь написать API, некоторые из которых имеют авторизацию на основе ролей. Далее я использую JWT для аутентификации для моих API.

Ниже приведен код, который я пытаюсь написать. Однако, когда я нажимаю конечную точку «/ user /: email», функция авторизации не вызывается. Всегда вызывается функция getUser . Я предполагал, что сначала нужно вызвать функцию авторизации, а затем getUser .

Может кто-нибудь объяснить мне, почему функция authorize не вызывается, когда я нажимаю на конечную точку "/ user /: email"? Что я здесь не так делаю? И как я могу правильно справиться с этим сценарием?

var express = require('express')
var router = express.Router();
var expressJwt = require('express-jwt');

var authorize = function(role){     
  expressJwt({secret:'secretKey'}, (req, res, next) =>{
    console.log('req.role is', req.role);
    if(req.role === role){
       next();
    }else{
       res.status(403).send({message: 'Unauthorized'});
    }
  })  
}

var getUser = function(req,res,next){
    res.status(200).send("Hello user");
}

router.get('/user/:email', authorize('Admin'), getUser); 

1 Ответ

1 голос
/ 16 марта 2019

authorize вызывается при запуске приложения, а не когда вы нажимаете «/ user /: email». Вызов authorize('Admin') просто возвращает неопределенное значение, что не приведет к выполнению console.log ни при нажатии «/ user /: email».

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

См. здесь

Таким образом, authorize('Admin') должен возвращать промежуточное программное обеспечение (также называемое обратным вызовом), такое как:

return expressJwt({secret:'secretKey'}, (req, res, next) =>{...})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...