私のコードが何らかの原因でリダイレクトループを引き起こしていました。 /account
にアクセスするユーザーは、認証されていない場合は/login
にリダイレクトする必要があります(逆の場合も同様)。req.isAuthenticatedを確認するとリダイレクトが多すぎます
私はそれはリクエストオブジェクト(req
)を受信しているようだ。ユーザーがログインしていることを確認するためのミドルウェアとしてensureAuth
を使用していますが、ないreq.user
オブジェクトがありませんとisAuthenticated()
は常にfalseを返します。しかし、/login
ルートでは、同じisAuthenticated()
メソッドが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);