2016-07-04 14 views
1

Ich versuche, Code für meine Route zu schreiben, dass, wenn die session.user_id undefined Redirect zurück auf die Homepage ist. Aus irgendeinem Grund wird die Umleitung nicht ausgeführt und die mysql-Bedingung wird ausgelöst und es stürzt den Server ab, weil die session.user_id nicht definiert ist und das Spiel nicht ohne diese Daten geladen werden kann.Umleiten, wenn Sitzung nicht verfügbar ist node.js

Gibt es eine Möglichkeit, eine universelle Weiterleitung auf allen Routen zu verwenden, die, wenn Sitzung nicht verfügbar ist, Redirect zurück zum Login?

   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); 

       }); 

       }; 

       }); 

Antwort

1

Sie sollten entweder: if (req.session.user_id === undefined)

ODER if (typeof req.session.user_id === "undefined")

Abgesehen davon ist es normalerweise besser, eine Middleware-Funktion zu haben, die nach Benutzersitzung sucht. Auf diese Weise können Sie nur den Anruf einfügen zu dieser Middleware in allen Ihren Routen, die den Benutzer erfordern in angemeldet sein:

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

Ich nehme an, der Wert ist undefined, und nicht "undefined" (das ist eine Zeichenfolge, die das Wort enthalten "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/'); 
} 

eine Funktion Fügen Sie die Auth Prüfung und dann injizieren zu handhaben ist eine Middleware zu deinem Router.

Verwandte Themen