检查req.isAuthenticated时重定向太多

时间:2016-10-13 02:10:02

标签: node.js express session-cookies passport.js

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

我正在使用ensureAuth作为中间件来检查用户是否已登录。它似乎正在接收请求对象(req),但没有req.user对象和{ {1}}始终返回false。然而,在isAuthenticated()路由中,如果用户已登录,则相同的/login方法将返回 true 。这是重定向循环的来源。

routes.js

isAuthenticated()

auth.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');
})

main.js

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

1 个答案:

答案 0 :(得分:1)

这可以帮助遇到// 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); 始终返回false的问题的其他人,或req.isAuthenticated()始终为空。

基本上,为了能够访问经过身份验证的会话,我只需要在 req.user之后调用routes.js

app.use(passport.session())