Devise warden 401 Nicht autorisiert bei falschen Anmeldeinformationen

8

Ich habe eine recht normale Devise-Login-Prozedur mit:

Anzeigen:

 Ressourcenname,: url = & gt; session_path (resource_name)) do | f | % & gt;      %Vor%

Und ich habe gerade einen Sitzungscontroller erstellt, um die E-Mail herunterzuladen:

%Vor%

Ein Login mit guten Anmeldeinformationen passiert gut.

Bei falschen Anmeldedaten wird auf die Anmeldeseite mit diesem Protokoll umgeleitet:

%Vor%

Anscheinend wird die 401 von Warden fallengelassen, aber ich konnte nicht herausfinden warum. Der Benutzer wird korrekt zurück auf die Anmeldeseite umgeleitet, aber es wird keine Fehlermeldung angezeigt (was normal ist, da sie durch die Weiterleitung gelöscht werden)

Was mache ich falsch?

Danke!

EDIT 1:

Für den Moment habe ich einen schnellen Hack gefunden. Ich habe das in SessionsController # new

hinzugefügt %Vor%

Nicht sehr elegant, aber zumindest habe ich etwas.

    
ndemoreau 10.01.2013, 09:10
quelle

3 Antworten

3

Ihre Flash-Nachricht wird nicht gesetzt, weil Devise::SessionsController#create den Warden für die Authentifizierung aufruft, die im Falle eines Fehlers Devise::FailureApp aufruft. Ihr Controller behandelt niemals die Fehlerszenarien.

Wenn Sie eine benutzerdefinierte Nachricht haben möchten, können Sie die Fehler-App dafür anpassen. Es gibt einige Artikel im Devise-Wiki erklären, wie man das macht.

Aber im Allgemeinen können Sie Ihre Fehlermeldungen über I18n anpassen und es gibt wahrscheinlich einen besseren Weg, um das zu erreichen, was Sie wollen, ohne Devise Controller zu überschreiben.

    
José Valim 12.02.2013, 14:40
quelle
5

Zunächst rate ich Ihnen, die Devise-Controller nicht zu übersteuern:

  1. In diesem Fall kümmert sich Devise darum, die E-Mail in eine niedrigere umzuwandeln Fall für Sie, so dass es wirklich nicht notwendig ist, die create -Methode zu überschreiben.
  2. Ihre App wird Devise Updates nahtlos unterstützen, wenn Sie bei der Standard.

Außerdem sollte Devise einen Flash-Fehler automatisch einstellen, stellen Sie sicher, dass Sie ihn in Ihrer Ansicht anzeigen.

Der Statuscode 401 ist nur eine Standardantwort für nicht autorisierte Anfragen.

  

401 Unauthorized ist ähnlich wie 403 Forbidden, aber speziell zur Verwendung   wenn eine Authentifizierung erforderlich ist und fehlgeschlagen ist oder noch nicht erfolgt ist   bereitgestellt

     

Ссылка

Sie sollten definitiv in Erwägung ziehen, Ihren benutzerdefinierten Controller zu löschen,

Prost

    
jassa 22.01.2013 22:25
quelle
3

Ich stimme jassa zu, aktualisieren Sie einfach Ihre Version von Devise (mit bundle update devise ).

Groß- und Kleinschreibung in E-Mails ist in Devise bereits vorhanden, stellen Sie sicher, dass Sie diese Konfiguration haben:

%Vor%

In jedem Fall, da Sie anscheinend einige Flash-Nachrichten und diese Konfiguration vermissen, wäre es vielleicht besser, wenn Sie den Generator einfach erneut ausführen:

%Vor%

Sie sollten Devise einige Dateien überschreiben lassen, stellen Sie sicher, dass Sie zuerst Ihre Dateien sichern.

    
Ashitaka 25.01.2013 02:42
quelle

Tags und Links