只允许passportjsauthentication的用户访问受保护的页面

将此代码放置在足以保护未经身份validation的用户访问的路由中?

if (!req.user) return res.send(401, "Not allowed in"); 

你可以使用req.isAuthenticated()来检查请求是否被authentication。

 function ensureAuthenticated(req, res, next) { if (req.isAuthenticated()) { return next(); } res.redirect('/login') } app.get('/server', ensureAuthenticated, routes.server.get); app.get('/login', routes.login.get); 

或者像这样

 app.all('*', function(req,res,next){ if (req.params === '/' || req.params === '/login') next(); else ensureAuthenticated(req,res,next); }); 

只要你不在某个地方泄漏路线就够了。 只要确保你的路线是在正确的顺序。

 //checks to be sure users are authenticated app.all("*", function(req, res, next){ if (!req.user) res.send(403); else next(); }); //additional routes will require authentication due to the order of middleware app.get("/admin", .... 

但是,如果您将pipe理路线移至全局之上,则pipe理路线将不再受保护。 你可能想有目的地把你的login页面提前,所以它不需要身份validation,例如。

更正user568109的答案,用express 4代码必须是这样的:

 app.all('*', function(req,res,next) { if (req.path === '/' || req.path === '/login') next(); else ensureAuthenticated(req,res,next); });