2012-06-22 6 views
2

인증 미들웨어를 작성 중이며 로그인이 성공적으로 완료되면 이전에 방문한 페이지로 리디렉션됩니다. 여기에 전체 config 블록입니다 : 오류 : app.use(authCheck.run)app.use(express.session) 중일 때 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); }); 

지금, Express는 오류가 발생 그들이 보낸 후 헤더를 설정할 수 없습니다. 내가 app.use(express.session) 이상이 전화를 이동하면

, 그것은 세션이 정의되지 않은 것을 말하는 500 오류가 발생합니다. 그리고 내 auth 함수는 세션 객체에 의존합니다.

어떻게해야합니까?

편집 : 여기 authCheck 기능 : 당신이 goToLastPage()를 호출 한 후

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를 넣습니다. res.redirect을 호출하여 체인의 다음 미들웨어 조각을 호출 한 후 여전히 next()을 호출하고 있습니다. 결국 경로 중 하나에 도달하여 결국 헤더를 설정하려고 시도하고 실패합니다.

+0

이것은 완전히 작동했습니다! –

관련 문제