2012-06-22 43 views
2

我正在編寫身份驗證中間件,它應該在成功登錄我們的註銷後重定向到先前訪問的頁面。下面是完整的配置塊:Express.js:使用會話中間件後無法重定向

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.static(__dirname + '/public')); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ secret: '__YouDontKnow__', store: new RedisStore })); 
    app.use(authCheck.run); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
}); 

現在,當app.use(authCheck.run)app.use(express.session)下,快速拋出錯誤:錯誤:發送之後無法設置頭。

如果我提出上述app.use(express.session)這個調用,它拋出一個500錯誤,指出會議是不確定的。而我的驗證功能取決於會話對象。

我該怎麼辦?

編輯:這裏的authCheck功能:

exports.run = function (req, res, next) { 
    var urlparser = GLOBAL.urlparser, 
     url = req.urlp = urlparser.parse(req.url, true), 

     goToLastPage = function() { 
     var redirectUrl = (req.session.lastVisitedPage) ? req.session.lastVisitedPage : '/'; 
     console.log("goToLastPage(%s)", redirectUrl); 
     res.redirect(redirectUrl); 
     return; 
     } 

    // Log out 
    if (url.pathname == '/user/logout') { 
    req.session.destroy(); 
    console.log('User has logged out'); 
    goToLastPage(); 
    } 

    // Log in 
    if (url.pathname == '/user/login' && req.method == 'POST') { 
    var email = req.body.login.email, 
     password = req.body.login.password; 

    req.session.auth = true; 
    req.session.userId = 1; 

    console.log('User has logged in'); 

    goToLastPage(); 
    } 

    next(); 
    return; 
} 
+0

你可以提供一些關於authCheck.run的更多信息 – Menztrual

+0

請參閱上面 –

+0

根本就沒有任何路線嗎?有什麼特別的事情會引發錯誤嗎? – Menztrual

回答

8

將一個return你打電話goToLastPage()後。在調用res.redirect調用鏈中的下一個中間件之後,您仍然呼叫next(),可能最終會敲擊您的某條路由,然後嘗試設置標頭並失敗。

+0

這完全工作! –