2016-07-04 13 views
1

session.user_idが定義されていない場合、ホームページにリダイレクトされたルートを作成しようとしています。何らかの理由でリダイレクトが実行されず、mysql条件が発生し、session.user_idが未定義であり、そのデータなしでゲームをロードできないため、サーバーがクラッシュします。セッションが利用できない場合のリダイレクトnode.js

セッションが利用できない場合、ログインにリダイレクトするすべてのルートでユニバーサルリダイレクトを使用する方法はありますか?

私は(言葉 "未定義" を含む文字列である)の値が undefinedであると仮定し、そしてない "undefined"
   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 (req.session.user_id === undefined)

OR 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

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/'); 
} 

認証チェックを処理してから注入する機能を追加するミドルウェアですあなたのルータに。

関連する問題