Node.js Authentifizierung mit Passport: Wie blinkt eine Nachricht, wenn ein Feld fehlt?

9

Ich benutze pass.js und möchte eine Nachricht anzeigen, wenn die Felder meines Formulars leer sind. Aber ich weiß nicht, wie es geht, da der Pass den Strategie-Callback nicht auslöst, wenn diese fehlen. Ich möchte wirklich, dass dieser Anwendungsfall klarer wird, und ich möchte den Pass nicht ändern. Ich habe das Gefühl, dass es einen Weg gibt, aber ich weiß nicht wo! Ich habe versucht, den Rückruf der Route ( app.post ) zu verwenden, aber es scheint nicht zu funktionieren, wie ich es versuchte.

Hier ist der Prototyp der Authentifizierungsfunktion:

%Vor%

Hier ist meine Strategie:

%Vor%

Und schließlich meine Route:

%Vor%     
Mael Jarnole 16.10.2014, 12:00
quelle

3 Antworten

13

Sie sollten req.flash nicht in Ihrem Bestätigungs-Callback aufrufen. Stattdessen sollten Sie eine Nachricht wie in der Dokumentation angezeigt zurückgeben. Passport wird die Nachricht an die Flash-Nachricht zurückgeben, wenn failureFlash: true .

Ihr überprüfter Bestätigungsrückruf:

%Vor%

Und Routen:

%Vor%

Bearbeiten:

Hier ist ein voll funktionsfähiges Beispiel: Ссылка

    
vesse 16.10.2014 15:03
quelle
3

Es ist eine alte Frage, aber ich hatte Schwierigkeiten, eine Antwort zu finden. Hoffentlich hilft das anderen.

Ich denke die Dokumentation ist etwas unvollständig, wenn es darum geht, connect-flash zu verwenden. Sie sagen:

  

Hinweis: Die Verwendung von Flash-Nachrichten erfordert eine req.flash () -Funktion. Express 2.x bietet diese Funktionalität, wurde jedoch aus Express 3.x entfernt. Die Verwendung der Connect-Flash-Middleware wird empfohlen, um diese Funktionalität bei der Verwendung von Express 3.x bereitzustellen.

Es wird jedoch nicht erwähnt, dass req.flash im done() -Rückruf verwendet wird. Basierend auf dem scotch.io-Lernprogramm sollten Sie eigentlich sollten rufe req.flash() genau dort im Callback auf. Für mich geht das.

%Vor%

Sie müssen natürlich passReqToCallback verwenden. Stellen Sie außerdem sicher, dass failureFlash auf true gesetzt ist. OP macht das schon richtig.

Jetzt können Sie die Flash-Nachricht in der Route überprüfen. Beachten Sie, dass connect-flash ein Nachrichten-Array sendet . Das könnte das OP-Problem sein, wenn seine Vorlage eine Zeichenfolge erwartet.

%Vor%

Wenn mehrere Anmeldeinformationen auf einer Seite angezeigt werden, übergeben Sie das gesamte req.flash('loginMessage') -Array und durchlaufen Sie es in Ihrer Vorlage. Unten ist ein Beispiel mit Nunjucks .

Protip:

Wenn Sie viele Routen mit Flash-Nachrichten haben, können Sie sie immer auf res.locals setzen eine Middleware-Route. Dies wird andere Einheimische nicht stören, wie title . Hier ist meine Implementierung, die bootstrap alerts verwendet.

In meiner Strategie:

%Vor%

In meinen routes.js:

%Vor%

In meiner Nunjucks-Basisvorlage:

%Vor%     
Keith 14.08.2016 22:30
quelle
3

Sie müssen badRequestMessage und failureFlash: true einstellen.

So:

%Vor%     
MrR0FL0LMA0MG 27.06.2016 13:32
quelle

Tags und Links