Исключение маршрутов из аутентификации экспресс-сайта - PullRequest
0 голосов
/ 12 сентября 2018

Я создаю приложение, используя узел, экспресс и промежуточное ПО для авторизации паспортов, реализованное для всех маршрутов. Я использую модульный подход к созданию своего приложения. Я пытаюсь исключить определенные API из аутентификации, когда я включаю их выше промежуточного программного обеспечения авторизации. Но когда я включаю app.use('/', require('./api/search/index')); над промежуточным ПО авторизации, API-интерфейсы под ним перестают работать. Критика и предложения приветствуются для этого подхода и что я могу сделать, чтобы решить эту проблему. Я не хочу включать промежуточное программное обеспечение маршрута в каждый маршрут, подобный этому

route.get('/example', auth.middleware(), function (req, res) {
})

Ниже представлен подход к моему приложению с промежуточным ПО с единой авторизацией для всех маршрутов

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var auth = require("./auth.js")();

app.use(auth.initialize());

//Excluding the search API from Authentication,
app.use('/', require('./api/search/index'));

//Middleware for all APIs and require Auth headers for authrization access
app.use(auth.authenticate(), function (req, res, next) {
    if (req.headers.authorization && req.user) {
        var parted = req.headers.authorization.split(' ');
        if (parted.length === 2) {
            console.log(req.user);
            next();
        } else {
            return res.status(403).send({
                success: false,
                msg: 'Unauthorized.'
            });
        }
    } else {
        return res.status(503).send({
            success: false,
            msg: 'Bad Request'
        });
    }
});

//Join routers
app.use('/', require('./api/users/index'));
app.use('/', require('./api/product/index'))
app.use('/', require('./api/company/index'))

Ответы [ 2 ]

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

Вы можете заблокировать свои маршруты вместе, используя express.Router. Например, вы можете создать маршрут с именем «/ api / secure», а затем создать маршрутизатор для этого маршрута и сгруппировать там все безопасные маршруты. а затем есть другой для незащищенных маршрутов '

enter image description here

Документы Express Router Docs

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

Есть миллион способов сделать это. Что вы можете сделать, это:

app.use('/', require('./api/search/index'));
app.use('/', auth.authenticate(), require('./api/users/index'));
app.use('/', auth.authenticate(), require('./api/product/index'))
app.use('/', auth.authenticate(), require('./api/company/index'))

Таким образом, промежуточное программное обеспечение auth.authenticate() будет применено к каждому дочернему маршруту, который вам требуется. И вы оставляете индекс без всего. Это дает вам более детальный контроль над тем, где вы применяете промежуточное программное обеспечение аутентификации, без необходимости применять его к каждому отдельному маршруту. Вы можете перейти на другой уровень и сгруппировать несколько маршрутов внутри /admin/ и применить промежуточное программное обеспечение только один раз. Ваше воображение - это предел.

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