Express.js 4 - 在静态文件之前使用中间件进行身份验证

Rad*_*nov 4 authentication middleware static-files node.js express

在我的express应用程序中,我已/public使用此行设置要从目录中提供的静态文件:

app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)

现在,我需要在提供静态内容之前添加用于身份验证的中间件,并且如果用户未经过身份验证,则需要重定向到用于身份验证的路由(例如,/login).
我不确定我该怎么做.有任何想法吗?

chr*_*etd 12

由于您没有指定它,我将假设您已经拥有某种身份验证系统.

在Express中,代码中间件的顺序很重要:如果要在中间件2之前执行中间件1,则应将它们相应地放在代码中.由于express.static 中间件,如果您想在提供静态文件之前进行身份验证,则可以在调用之前编写身份验证中间件express.static

app.use(function (req, res, next) {
    if (!userAuthenticated(req)) {
        return res.redirect('/login');
    }
    next();    
});

app.use(express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)

我假设您有一个userAuthenticated函数,例如检查HTTP请求是否包含有效的访问令牌.

阅读有关中间件的更多信息.