使用ExpressJS保护静态文件服务器

Securing Static File Server with ExpressJS

本文关键字:文件服务器 静态 保护 ExpressJS 使用      更新时间:2023-09-26

我已经使用express.js和passport.js在本教程的基础上实现了一个身份验证系统。

在过去,我使用过一个带有modRewrite的express服务器,它看起来像这样:

var express    = require('express');
var modRewrite = require('connect-modrewrite');
var app = express();
var baseURL = './dev/';
var portnum = 3000;
app.use(modRewrite([
  '^[^''.]*$ /index.html [L]'
]))
.use(express.static(baseURL))
app.listen(process.env.PORT || portnum)

但现在有了身份验证,我正在使用这样的路线:

var baseURL = './dev/';
router.get('*', isAuthenticated, function(req, res, next){
    // if path contains file extension
    // behave as static file server
    if (req.path.indexOf('.') !== -1) {
        var fullPath = baseURL + req.path;
        res.sendfile(fullPath)
    // else send index.html
    } else {
        res.sendfile(baseURL + '/index.html')
    }
});

我想有一种更好的方法来做我想做的事情,我想利用express.static服务器和modRewrite。此外,我的服务器进行身份验证的速度要慢得多,可能是因为每次请求文件时都必须检查身份验证。关于如何加快速度,有什么建议吗?

我使用中间件来检查用户是否经过身份验证(无论是JWT令牌还是任何其他身份验证方案)。

app.use(function (req, res, next) {
    if(isAuthenticated()) {
       next();
    } else {
       res.send(401, 'unauthorized');
    }
});