2016-07-12 14 views
3

Dies ist meine erste Express-App. Ich versuche, die Authentifizierung für einige Routen zu implementieren. Im Idealfall werden Benutzer, wenn sie nicht authentifiziert sind, auf die Homepage weitergeleitet. Also schrieb ich diese Middleware:Umleiten zu nicht authentifizierten Benutzer mit Express-JWT

var jwt = require('express-jwt'); 

app.get('/protected', 
    jwt({secret: 'shhhhhhared-secret'}),  //express-jwt middleware 
    function(req, res, next) {    //redirection middleware 
    if(!req.user._id){ 
     console.log('authentication failed') 
     res.redirect('/home') 
    }else{ 
     next() 
    }; 
    }); 

Wenn der Benutzer angemeldet ist, funktioniert der Code. Wenn der Benutzer jedoch nicht angemeldet ist, zeigt der Browser einfach einen nicht autorisierten 401-Fehler an. Es gibt keine Umleitung. Der Prozess ist bei der Express-JWT-Middleware fehlgeschlagen und hat nicht weiter zu meiner Umleitungs-Middleware geführt.

Gibt es eine Konfiguration, die ich innerhalb der JWT-Funktion einstellen muss? Oder gibt es eine Möglichkeit, eine globale Umleitung festzulegen, wenn 401 gefunden wird.

Antwort

4

Wenn der Benutzer nicht authentifiziert ist, wird der Fehler ausgelöst und node.js stoppt die Codeausführung. Danach können Sie es in Express-Fehler-Handler abfangen:

app.use(function(err, req, res, next) { 
    if(401 == err.status) { 
     res.redirect('/home') 
    } 
    }); 
+0

Sollte dieser Code vor der Authentifizierung Middleware oder nach? – Sydney

+0

Diese Middleware sollte die letzte sein. Vergiss nicht, andere Fehler in if else zu behandeln. Sie können SMS oder E-Mail mit Fehlerbeschreibung senden oder einfach in der Datenbank speichern. –