除了一个之外,如何保护所有路线?

时间:2016-11-03 20:19:26

标签: node.js passport.js

我使用Jared Hanson的 connect-ensure-login 方法,文档通过在登录时挂载authenticate()中间件来表明它与护照集成路由。

我想知道这是否意味着只有那条路线受到保护?或者所有路线都是?

此外,我目前在我的应用程序中有重试计数/锁定逻辑,但这个模块看起来相当简单,因为它只在失败时重定向。是否可以使用更复杂的逻辑?

1 个答案:

答案 0 :(得分:0)

您需要自己保护路线。由于路线定义的顺序很重要,你可以做例如。

// Obviously cannot be protected
app.get('/login', function(req, res) {
  res.send(...);
});

// Authentication
app.post('/login', passport.authenticate('strategy', {
  successReturnToOrRedirect: '/',
  failureRedirect: '/login'
}));

// A random unprotected route
app.get('/unprotected', function(req, res) {});

// From now on all routes require authentication
app.all('/*', ensureLoggedIn('/login'));

// Root of domain for authenticated users only
app.get('/', function(req, res) {
  res.send(...);
});

connect-ensure-login模块只定义了一个简单的中间件,您可以轻松定义自己的内容,以满足您的需求。我相信许多甚至大多数人甚至使用更简单的中间件来检测这样的经过身份验证的用户:

var isAuthenticated = function(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  } else {
    return res.redirect('/login');
  }
};