2016-10-13 3 views
0

私のコードが何らかの原因でリダイレクトループを引き起こしていました。 /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); 

答えて

1

これはreq.isAuthenticated()は常に返し問題に実行されている他の人を助けることができます偽、またはreq.userは常に空です。

基本的には、認証されたセッションへのアクセス権を持っているために、私はちょうどapp.use(passport.session())routes.jsを呼び出すために必要な。

// 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')); 
関連する問題