2016-07-04 5 views
1

session.user_id가 정의되지 않은 경우 홈 페이지로 다시 리디렉션되는 경로에 대한 코드를 작성하려고합니다. 어떤 이유로 리디렉션이 실행되지 않고 mysql 조건이 실행되고 session.user_id가 정의되지 않았고 해당 데이터없이 게임을로드 할 수 없기 때문에 서버가 충돌합니다.세션을 사용할 수없는 경우 리디렉션 node.js

세션을 사용할 수없는 경우 로그인으로 다시 리디렉션되는 모든 경로에서 범용 리디렉션을 사용하는 방법이 있습니까?

   router.get('/game', function(req,res) { 

       console.log(req.session.user_id); 

       if (req.session.user_id === "undefined") { 

       res.redirect('/'); 

       }else { 

       var condition = 'userId = ' + req.session.user_id; 

       projectX.allGameData(condition, function(data){ 

       var hbsObject = {heroes : data, logged_in: req.session.logged_in, isUser: req.session.isUser, isAdmin: req.session.isAdmin} 

       res.render('game', hbsObject); 

       }); 

       }; 

       }); 

답변

1

을 당신이 사용하거나해야 또는 if (typeof req.session.user_id === "undefined")

그 외에도 일반적으로 사용자 세션을 확인하는 미들웨어 기능을 갖는 것이 좋습니다. 이 방법은, 당신은 단지 사용자가 요구하는 모든 경로에서이 미들웨어에 전화를 삽입 할 수 있습니다에 기록 될 :

router.get('/game', checkUserSession, function(req,res) { 
    // Your code here 
}); 

function checkUserSession(req, res, next) 
{ 
    if(req.session.user_id) 
    { 
     next(); 
    } 
    else 
    { 
     res.redirect('/homepage'); 
    } 
}//checkUserSession() 
1

나는 값이 undefined 가정, 그리고 "undefined" (이는 단어 "정의되지 않은"이 포함 된 문자열) : if (req.session.user_id === undefined)

:

if (req.session.user_id === undefined) { 
    ... 
} 
0
//Inject authHandler as middleware 
router.get('/my/route/', authHandler, (req, res) => { 
    //secure point, the authHandle went thru 
}); 
function authHandler(req, res, next) { 
    if (req.session.user_id) { 
     next(); 
    } 
    res.redirect('/login/'); 
} 

가 인증 확인을 처리 할 수있는 기능을 추가 한 후 주입은 미들웨어 귀하의 라우터에.

관련 문제