仅允许通过身份验证的用户访问受保护的页面

时间:2013-07-19 23:09:22

标签: javascript node.js express passport.js

将此代码放在足以保护网页免受未经身份验证的用户的路径中吗?

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

3 个答案:

答案 0 :(得分:22)

您可以使用req.isAuthenticated()检查请求是否经过身份验证。

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.path === '/' || req.path === '/login')
  next();
  else
  ensureAuthenticated(req,res,next);  
});

答案 1 :(得分:2)

只要你没有在某个地方泄漏路线就足够了。只需确保您的路线顺序正确。

//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", .... 

但是,如果您将管理路由移到全局管理路由之上,则管理路由将不再受到保护。您可能希望有目的地提前登录页面,以便它不需要身份验证。

答案 2 :(得分:2)

对user568109的回答进行更正,快递4代码必须如下:

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