2013-12-23 10 views
31

Mit Passport.js gibt es eine Möglichkeit für mich, mehrere Authentifizierungsanbieter für dieselbe Route anzugeben?pass.js mit mehreren Authentifizierungsanbietern?

Zum Beispiel (aus dem Pass-Handbuch) kann ich lokale und Facebook-und Twitter-Strategien auf der Probe-Route unten verwenden?

app.post('/login', 
    passport.authenticate('local'), /* how can I add other strategies here? */ 
    function(req, res) { 
    // If this function gets called, authentication was successful. 
    // `req.user` contains the authenticated user. 
    res.redirect('/users/' + req.user.username); 
    }); 
+0

Warum erwarten Sie mehrere Strategien in einer Route nach dem Mischen? – damphat

Antwort

52

Passport-Middleware ist so aufgebaut, dass Sie mehrere Strategien in einem passport.authenticate(...) Aufruf verwenden.

Es ist jedoch mit einer OR-Reihenfolge definiert. Dies ist nur möglich, wenn keine der Strategien erfolgreich war.

Dies ist, wie Sie es verwenden würde:

app.post('/login', 
    passport.authenticate(['local', 'basic', 'passport-google-oauth']), /* this is how */ 
    function(req, res) { 
     // If this function gets called, authentication was successful. 
     // `req.user` contains the authenticated user. 
     res.redirect('/users/' + req.user.username); 
}); 

Mit anderen Worten, die Art und Weise, es zu benutzen, ein Array ist vorbei den Namen der Strategien aus, die Sie dem Benutzer authentifizieren möchten.

Vergessen Sie auch nicht, die Strategien, die Sie implementieren möchten, zuvor einzurichten.

Sie können diese Informationen in den folgenden Github Dateien bestätigen:

Authenticate using either basic or digest in multi-auth example.

Passport's authenticate.js definition

+0

Ausgezeichnet! Danke für deine Hilfe, genau das habe ich gesucht! – cgiacomi

+1

Wie kann ich feststellen, welche Authentifizierungsstrategie letztendlich zur Authentifizierung der Benutzer verwendet wurde? Ich kann natürlich für jede Strategie einen anderen Endpunkt festlegen, aber ich versuche, es zu vermeiden. –

+0

@asafam Soweit ich mich erinnere, enthält der req.user die Informationen, die von der Login-Strategie verwendet werden. Hätte es zu überprüfen, tho .... Die meisten der Informationen in der Sitzung (nach) verwendet wird im Requ-Objekt –

Verwandte Themen