Авторизовать функцию промежуточного программного обеспечения - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь собрать систему авторизации в node.js, и все работает нормально с приведенным ниже кодом.

Authorize.js

const expressJwt = require('express-jwt');
const userService = require('../routes/users/user.service');

module.exports = authorize;

function authorize(roles = []) {

    return expressJwt(
      { 
        <<SOME SECRET>>, 
        isRevoked: (req, payload, done) => _isRevoked(req, payload, done, roles) 
      })
      .unless(
      {
        path: [
        ]
      });
}

async function _isRevoked(req, payload, done, roles) {

    var user = await userService.getById(payload.sub);
    var userRoles = payload.role;

    // revoke token if user no longer exists
    if (!user) {
      console.log("Authorization: User not found")
        return done(null, true);
    }

    //check if user is authorized
    if (roles.length && !roles.every(elem => userRoles.indexOf(elem) > -1)) {
                // user's role is not authorized
                return done(null, true);
            }
    done()
};

RoleController.js

const express = require('express')
const router = express.Router()
const authorize = require('helpers/authorize')

router.post('/create', authorize('Admin'), createRole)

module.exports = router

function createRole(req, res, next)
{
    //role creation code goes here
}

Пока все работает нормально, когда с токеном запрашивается маршрут create, authorize.js проверяет, является ли токен действительным, и после проверки, если пользовательРоль совпадает с ролью маршрута (например, admin здесь)

Теперь проблема решается здесь

Я пытаюсь переместить authorize в промежуточное ПО в RoleController.js.И получите доступ для модуля из database на основе запрошенного маршрута через req.originalUrl

var isAuthorized = function (req, res, next)
{
    authorize(req.originalUrl) // just trying to check the authorization as a first level and moving forward to route only if authorized

    next();
}

router.post('/create', createRole) //Removed authorize here

После изменения этого он не работает должным образом.Процесс переходит к функции authorize, но он не вызывает функцию _isRevoked.

Это может быть из-за async в _isRevoked, но я застрял здесь, чтобы продолжить.Есть идеи?

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