【问题标题】:Excluding routes from authentication express site排除来自身份验证快速站点的路由
【发布时间】:2018-09-12 18:40:12
【问题描述】:

我正在使用 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'))

【问题讨论】:

    标签: javascript node.js express authentication


    【解决方案1】:

    有上百万种方法可以做到这一点。你可以这样做:

    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() 中间件将应用于您需要的每个子路由。然后你什么都没有留下索引。这使您可以更精细地控制应用 auth 中间件的位置,而无需将其应用到每条路由。您可以将其提升到另一个级别,并在 /admin/ 中对多个路由进行分组,并且只应用一次中间件。你的想象力是极限。

    【讨论】:

      【解决方案2】:

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

      Express Router Docs

      【讨论】:

      • 我已经按照 express 文档中提到的方式使用了基于功能的文件夹结构(检查我的代码),但是由于某种原因,当我与护照中间件集成时它不起作用
      • 您是否尝试在 router.use() 中设置护照中间件?,您可以将所有内容包装在一个辅助函数中,并为每个路由器组传递一个身份验证选项
      • 第一个答案看起来也很干净
      猜你喜欢
      • 2016-05-10
      • 1970-01-01
      • 2017-04-27
      • 2017-07-03
      • 2020-09-29
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多