2016-08-30 2 views
2

Ich habe eine lokale Passport-JS-Registrierungsstrategie, die die Methoden successRedirect und failureRedirect verwendet. Das Problem besteht darin, dass Passport bei einem Anmeldefehler einfach zurück zum Anmeldeformular umleitet, ohne dass Daten im Formular enthalten sind.Senden von Daten mit der Passport-Methode js failureRedirect

app.post('/signup', passport.authenticate('local-signup', { 
     successRedirect: '/signup/avatar', // redirect to the secure profile section 
     failureRedirect: '/signup', // redirect back to the signup page if there is an error 
     failureFlash: true // allow flash messages 
    })); 

Ich habe die folgende Bedingung in meinem lokalen Anmeldestrategie, die eine Fehlermeldung an den Benutzer senden, wenn die beiden mitgelieferten Passwörter nicht übereinstimmen.

if(req.body.password != req.body.confirm_password){ 
           console.log('Passwords do not match'); 
           return done(null, false, req.flash('signupMessage', 'Your passwords do not match')); 
          } 

Zusammen mit der Flash-Mitteilung, ich möchte Daten an dem/Anmeldungen Weg zurück zu senden und wieder füllen Sie das Formular mit den Daten der Nutzer zur Verfügung gestellt haben.

Gibt es eine Möglichkeit, die Formulardaten bei einem Fehler an den Browser zurückzusenden?

+0

Warum wollen Sie die Daten erneut senden (das heißt die Fehlermeldung), wenn Sie bereits die 'req.flash' Instanz bevölkern? Sie müssen nur auf den 'req.flash'-Inhalt verweisen, den Sie für Ihre Ansicht verwenden. – Ben

+0

Die Flash-Nachricht funktioniert. Das Problem ist, dass der Benutzer das ganze Formular erneut ausfüllen muss, nur weil sie eine falsche Eingabe erhalten haben. Ich möchte die Daten an die Ansicht zurücksenden, damit ich das Formular mit allen von ihnen gesendeten Daten ausfüllen kann, abzüglich des Teils, der falsch war. – Tom

+0

Bitte überprüfen Sie meine Antwort in unten stehenden Link. Hoffe das wird helfen. http://stackoverflow.com/questions/13598837/node-js-express-form-clears-on-submission/39632406#39632406 – kanna

Antwort

1

Die Antwort war viel einfacher, als ich erwartet hatte.

Die Validierung sollte erfolgen, bevor die Daten an Passport js gesendet werden. Wenn die Daten nicht gültig sind, kann die Vorlage/signup erneut gerendert und die Daten zurückgegeben werden.

Die Lösung war in dieser Frage: NodeJS express-validator with passport

0

Entschuldigung, nach unseren Kommentaren verstehe ich, was Sie jetzt ein wenig besser fragen. Sie müssen einen benutzerdefinierten Rückruf in Ihrem Passcode verwenden. Der Pass Seite gibt folgendes Beispiel:

app.get('/login', function(req, res, next) { 
    passport.authenticate('local', function(err, user, info) { 
    if (err) { return next(err); } 
    if (!user) { return res.redirect('/login'); } 
    req.logIn(user, function(err) { 
     if (err) { return next(err); } 
     return res.redirect('/users/' + user.username); 
    }); 
    })(req, res, next); 
}); 

durch einen Verschluss hier Ihren Rückruf Zugang hat sowohl auf die Anfrage und die Antwort, so dass, wenn Sie mit Ihrem Fehlerzustand umgehen, können Sie Code aufrufen, um die Antwort von der aktualisieren Ursprungsanforderung (z. B. das Eingeben des angegebenen Benutzernamens oder was immer Sie möchten, um den Anmeldebildschirm mit zu füllen).

http://passportjs.org/docs/authenticate

+0

Danke, ich bin immer noch nicht sicher, wie das auf der Passport-Seite aussieht. Wenn es einen Fehler gibt, sende ich immer noch 'return done (null, false, req.flash (' signupMessage ',' Ihre Passwörter stimmen nicht überein '));' – Tom