2015-08-22 13 views
15

Sono un nodo.js e un express.js noob. Questa domanda potrebbe sembrare sciocca, ma sono davvero in confusione.Che cos'è la funzione di callback "done" in Passport Strategy Configura la funzione "use"

Sto tentando di configurare l'autenticazione Local Strategry utilizzando passport. Come mostrato nella documentazione ufficiale, siamo in grado di capire questa strategia locale dal seguente codice,

passport.use(new LocalStrategy(
    function(username, password, done) { 
    User.findOne({ username: username }, function (err, user) { 
     if (err) { return done(err); } 
     if (!user) { return done(null, false); } 
     if (!user.verifyPassword(password)) { return done(null, false); } 
     return done(null, user); 
    }); 
    } 
)); 

La mia confusione è sulla funzione di callback done. Quando i documenti ufficiali mostrano questa strategia locale che utilizza come middleware nel gestore di instradamento, non è necessario passare il parametro di funzione per questo callback done.

app.post('/login', 
    passport.authenticate('local'), 
    function(req, res) { 
    res.redirect('/'); 
    }); 

Quindi, non è questa funzione di callback done sarà nullo se non forniamo il parametro della funzione? In caso contrario, cos'è la funzione di richiamata done e quali processi si verificheranno in questa funzione di callback done?

risposta

27

done è un metodo called internally by the strategy implementation.

Poi si naviga, come si può vedere, ad uno dei success/error/fail metodi (ancora una volta, dalla realizzazione. there are more options). Ciascuna di queste opzioni può calls al next, dove nel frammento di codice è il seguente:

function(req, res) { 
    res.redirect('/'); 
}); 

Quando success è chiamato, it can attach the user to the request o fare altre cose, a seconda delle esigenze (sembra per il options si passa a passport.authenticate). Se si desidera determinare quando verrà chiamato next, è necessario utilizzare custom callback che offre maggiore flessibilità.

Si consiglia vivamente di leggere la fonte.

+0

Grazie per la risposta. Dopo poche ore ho fatto questa domanda, gradualmente capisco che "fatto" potrebbe essere gestito internamente dal passaporto. Ora ho capito quando vedo la tua risposta. La documentazione del passportjs –

+2

necessita di miglioramenti significativi – Internial

Problemi correlati