2017-08-01 1 views
0

Ich verwende Passport mit der passport-jwt Strategie, Benutzer mit einem JavaScript Work Token zu authentifizieren. Ich muss Benutzer basierend auf einigen Metadaten autorisieren können, so dass ich einen benutzerdefinierten Rückruf eingerichtet habe, den ich an die Route anhefte.Middleware nicht ausfüllen Fehler, wenn JWT ungültig ist

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

aber ich habe Probleme beim Aufruf der Funktion. Ich habe es massiv vereinfacht und die Strategie wie folgt:

module.exports = { 
    loginRequired: function (req, res, next) { 
    passport.authenticate('jwt', {session: false}, function(err, user, info) { 
     if (!err) { 
     next() 
     } else { 
     res.status(401).send 
     } 
    })(req, res, next) 
    } 
} 

Die Strategie ist unten dargestellt:

passport.use(new JwtStrategy(opts, function(payload, done) { 
    var user = {firstName: 'Geraint', email: '[email protected]'} 
    if (payload) { 
    done(null, user) 
    } else { 
    done('Error', null) 
    } 
})) 

Wenn der JWT gültig ist, die passport.authenticate Rückruf mit null wie erwartet aufgerufen wird und der Benutzer wird korrekt übergeben. Wenn der JWT jedoch ungültig ist, wird der Fehler als Information an den Authentifizierungsrückruf weitergeleitet. err ist null und user ist falsch.

Warum werden die Parameter bei einem Fehler durcheinander gebracht?

Antwort

0

Ich arbeitete auch mit diesem und ich bekam die gleiche Ausgabe. Passport js funktionieren nur auf diese Weise.

Sie Zustand ändern kann, und es wird im Fall von Benutzerobjekt vorhanden

module.exports = { 
    loginRequired: function (req, res, next) { 
    passport.authenticate('jwt', {session: false}, function(err, user, info) { 
     if (user) { 
     next() 
     } else { 
     res.status(401).send 
     } 
    })(req, res, next) 
    } 
} 

arbeiten, wird es Erfolg zurückkehren sonst wird es Fehler zurück.

0

Was ich für JWT-Authentifizierung zu tun ist:

router.get('/', passport.authenticate('jwt', {session: false}), function (req, res) {... 

Wenn der JWT nicht gültig ist, dann gibt es einen 401. Wenn es gültig ist, dann ist es in meinen Weg weiter.

Verwandte Themen