2014-09-04 90 views
4

我使用express.js和passport.js實現了基於this tutorial的認證系統。使用ExpressJS保護靜態文件服務器

在過去,我已經使用modRewrite明示服務器是這樣的:

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。此外,我的身份驗證服務器速度較慢,可能是因爲每次請求文件時都必須檢查身份驗證。任何提示如何使這個更快?

+0

「每次請求文件時都必須檢查身份驗證」 - passport.js具有內置的會話管理,請參閱:http://passportjs.org/guide/configure/ – kol 2014-09-05 03:13:06

回答

0

我使用中間件來檢查用戶是否已通過身份驗證(無論是在JWT令牌還是任何其他身份驗證方案中)。

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