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% 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: Ссылка
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.
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.
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% Sie müssen badRequestMessage
und failureFlash: true
einstellen.
So:
%Vor%Tags und Links javascript node.js passport.js