我的代码以某种方式导致重定向循环。访问/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'); }
})
答案 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())