2017-06-04 1 views
0

Ich möchte sowohl die Funktion, die die JWT und die passport.authenticate ausführt, aber nur die ehemalige ausgeführt wird.Ausführen einer übergebenen Funktion und pass.authenticate

Gibt es eine Möglichkeit, dass ich beide laufen kann?

router.post('/login', (req, res, next) => { 

    const userEmail = req.body.username; 

    User.getUserByEmail(userEmail, function(err, user) { 

    const token = jwt.sign(user, config.secret, { 
     expiresIn: 604800 // 1 week 
    }); 
    new Cookies(req, res).set('access_tokenx', token, { 
     httpOnly: true, 
     secure: false 
    }); 
    return res.send(); 
    }); 
}, 
passport.authenticate('local', { 
    successRedirect: '/', 
    failureRedirect: '/users/login', 
    failureFlash: true 
}), 
function(req, res) { 
    res.redirect('/'); 
}); 

Antwort

1

Vom expressdocs:

Wenn die aktuellen Middleware-Funktion nicht den Request-Response Zyklus beenden, es beim nächsten nennen muß() Steuerung auf die nächste Middleware Funktion zu übergeben .

Da Sie versuchen, zwei Middleware-Funktionen und einen „endgültigen“ Anforderungsprozessor ausgeführt werden, sollten Sie return res.send(); mit next() in der Funktion ersetzen, die JWT setzt.

Denken Sie auch daran, dass Sie im Falle eines Fehlers next(err) anrufen sollten. (Sie sollten niemals zulassen, dass eine Anforderung in einer Middleware-Funktion nicht behandelt wird, da der Client niemals eine Antwort erhält).

+0

Es hat perfekt funktioniert, Vielen Dank, dies verursacht seit Ewigkeiten Probleme. Ich wünsche dir Glück in allem was du tust, habe einen tollen Tag, Woche, Monat, Jahr und Leben Mann! –

+0

Lol danke, aber hast du nur mein Geschlecht angenommen? :-) –

+0

Oh, mach dir keine Sorgen, ich beziehe mich auf jeden als Mann! :-) –

Verwandte Themen