排除来自身份验证快速站点

时间:2018-09-12 18:40:13

标签: javascript node.js express authentication

我正在使用node,express创建一个应用,并为所有路线实现了护照授权中间件。我正在遵循高度模块化的方法来构建我的应用程序。当我在授权中间件上方添加特定的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 :(得分:0)

您可以使用一百万种方法来执行此操作。您可以执行以下操作:

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/内对多个路由进行分组,并且仅将中间件应用一次。您的想象力是极限。

答案 1 :(得分:0)

您可以使用express.Router一起阻止路由。例如,您可以有一个名为“ / api / secure”的路由,然后为该路由创建一个路由器,并将所有安全路由分组。然后针对不安全的路线设置另一个

enter image description here

Express Router Docs