Express4.js - 仅在有活动 passport.js 会话时路由

Express4.js - route only if there is an active passport.js session

我正在使用 passport.js 和 express4.js。我想知道是否有一种自动方法来验证客户端在尝试访问视图时是否打开了 passport.js 的会话?

实际上我这样做是为了验证客户端是否可以访问 url:

router.get('/[0-9]{3}/', function(req, res, next){
    var path_codecs = req.originalUrl.split('/')[2];

    if (!req.user) {
        res.redirect('/login');
    } 
    if (req.user.dataValues.codecs !== path_codecs) {
        next();
    }
    res.render('decoupage')
});

我是否必须在我想限制为会话用户的每个视图中执行此验证,或者是否有更自动的方法来定义哪些视图可以访问哪些视图不能访问?

您可以使用req.user(成功验证后将设置哪个Passport)。

我通常在像这样的瘦中间件中使用它:

function isAuthenticatedMiddleware (req, res, next) {
  if (req.user) { return next(); }

  next('AuthenticationError');
}

router.get('/[0-9]{3}/', isAuthenticatedMiddleware, function(req, res, next){

您可以使用 express router.all

轻松地将此添加到 all 路由器上的路由
router.all('*', isAuthenticatedMiddleware);