检查时重定向过多 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') );
我的代码以某种方式导致了重定向循环。如果访问 /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') );