Ich erstelle eine Anwendung, die Knoten verwendet, der Passport.js verwendet, um Benutzeranmeldung unter Verwendung einer lokalen Datenbank zu verarbeiten.Node.js Passport, der die nächste Funktion nicht aufruft
So habe ich den folgenden Code, der aufgerufen wird, wenn ein Benutzer zu/Profil geht. Nach erfolgreicher Anmeldung wird der Benutzer nach/profile weitergeleitet. Was nach morgan geschieht.
app.get('/profile', passport.authenticate('local-login', { session : false, failureRedirect : '/login' }), function(req, res) {
console.log("testnow");
res.render('profile.ejs', {
user : req.user // get the user out of session and pass to template
});
});
Mein lokaler Login-Code ist der folgende.
passport.use('local-login', new LocalStrategy({
// by default, local strategy uses username and password, we will override with email
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true // allows us to pass back the entire request to the callback
},
function(req, email, password, done) { // callback with email and password from our form
// find a user whose email is the same as the forms email
// we are checking to see if the user trying to login already exists
User.findOne({ 'local.email' : email }, function(err, user) {
// if there are any errors, return the error before anything else
if (err)
return done(err);
// if no user is found, return the message
if (!user)
return done(null, false, req.flash('loginMessage', 'No user found.')); // req.flash is the way to set flashdata using connect-flash
// if the user is found but the password is wrong
if (!user.validPassword(password))
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); // create the loginMessage and save it to session as flashdata
// all is well, return successful user
console.log("testdone");
return done(null, user);
});
}));
Beim Testen des Codes logge ich mich ein und werde für einen Bruchteil einer Sekunde zum Profil weitergeleitet. Die Konsole druckt "testdone", was in meinem lokalen Login-Code ist, aber "testnow" nicht wie erwartet druckt. Das heißt, die zweite Funktion in meiner/profile get-Methode scheint nie aufgerufen zu werden, selbst wenn die lokale Anmeldung die nächste Funktion aufruft.
Also von den Endbenutzern Standpunkt loggen Sie sich ein (hinter den Kulissen werden Sie umgeleitet/Profil für einen Split-Bereich) und/Profil leitet Sie zurück zu/Login.
Irgendwelche Ideen, wie dies zu beheben, so dass die zweite Funktion in meinem/Profil get-Methode tatsächlich aufgerufen wird?
Vielen Dank im Voraus. Ich wäre auch gerne bereit, Ihnen zusätzliche Informationen zur Verfügung zu stellen.
Versuchen Sie, ein Attribut zum options-Objekt am pasport.authenticate hinzuzufügen: 'successRedirect: '/ profile'und erstellen Sie eine Route/Profil im Erfolgsfall, ich weiß nicht, ob der Pass die nächste Funktion nach Ihnen anruft 'authentifizieren auslassen successfulRedirect –
@FernandoZamperin Hinzufügen eines Erfolgs Redirect/Profil wird eine Endlosschleife zu korrigieren? –
Sorry ich missverstanden !!! Versuchen Sie, zu einem anderen Weg successRedirect nur für Testzwecke, um zu sehen, ob das Problem ist, dass Pass nicht als nächstes ruft –