检查时重定向过多 req.isAuthenticated

Too many redirects when checking req.isAuthenticated

我的代码以某种方式导致了重定向循环。如果访问 /account 的用户未通过身份验证,则应将其重定向到 /login,反之亦然。

我正在使用 ensureAuth 作为中间件来检查用户是否已登录。它似乎正在接收请求对象 (req),但没有 req.user 对象isAuthenticated() 总是 returns 错误。然而在 /login 路由中,相同的 isAuthenticated() 方法 returns true 如果用户已登录。这就是重定向循环的来源。


routes.js

var ensureAuth = function(req,res,next){
  if (req.isAuthenticated()) { // This always comes out false, even if the user is logged in!
    next();
  } else {
    req.flash('warning', 'You have to log in to do that.  ');
    res.redirect('/login');
  }
};

router.route('/account').get( ensureAuth, function(req,res){
  res.render('account.html');
})

auth.js

app.route('/login').get( function(req,res){
  if (req.isAuthenticated()){
    res.redirect('/account'); }
  else { res.render('login.html'); }
})

main.js

// Routes
app.use('/files', express.static(__dirname+'/public'));
app.use('/', require('./config/routes.js') );

// Auth
require('./config/passport.js')(passport);
app.use(passport.initialize());
app.use(passport.session());
require('./config/auth.js')(app, passport);

这可以帮助 运行 的其他人解决 req.isAuthenticated() 总是 returns false 或 req.user 总是空的问题。

基本上,为了访问经过身份验证的会话,我只需要调用 routes.js after app.use(passport.session())

// Auth
require('./config/passport.js')(passport);
app.use(passport.initialize());
app.use(passport.session());
require('./config/auth.js')(app, passport);

// Routes
app.use('/files', express.static(__dirname+'/public'));
app.use('/', require('./config/routes.js') );