Entwickle Protokoll nach Auth-Fehler

7

Ich muss ein Protokoll schreiben, wenn jemand nicht in meiner App angemeldet ist (um Bruteforce-Versuche zu verfolgen). Auch ich habe mich dafür entschieden, erfolgreiche Authentifizierungen zu protokollieren. Also habe ich einen SessionsController & lt; Devise :: SessionsController und versuchte die Sessions # create-Methode wie folgt zu überschreiben: Ссылка

Der erste Teil funktioniert perfekt, aber wenn die Auth Failes Schienen wirft eine Art von Ausnahme und erreicht nie die if-Anweisung. Also ich weiß nicht was ich machen soll.

    
Almaron 13.10.2012, 14:17
quelle

4 Antworten

17

Diese Antwort auf eine vorherige SO-Frage - Devise: Anmeldeversuche anmelden hat die Antwort.

  

Die create-Aktion im Devise-Controller ruft warden.authenticate! auf und versucht, den Benutzer mit den angegebenen Parametern zu authentifizieren. Wenn die Authentifizierung fehlschlägt, authentifizieren Sie sich! ruft die Gerätefehler-App auf, die dann die Aktion "SessionsController # new" ausführt. Beachten Sie, dass alle Filter für die Erstellungsaktion nicht ausgeführt werden, wenn die Authentifizierung fehlschlägt.

     

Die Lösung besteht also darin, nach der neuen Aktion einen Filter hinzuzufügen, der den Inhalt von env ["warden.options"] überprüft und die entsprechende Aktion ausführt.

Ich habe den Vorschlag ausprobiert und war in der Lage, sowohl den erfolgreichen & amp; fehlgeschlagene Anmeldeversuche Hier ist der relevante Controller-Code:

%Vor%

Das Protokoll enthält die folgenden Einträge:

Für eine erfolgreiche Anmeldung

%Vor%

Für eine fehlgeschlagene Anmeldung

%Vor%     
Prakash Murthy 13.10.2012, 21:30
quelle
4

Prakashs Antwort ist hilfreich, aber es ist nicht ideal, sich auf SessionsController#new als Nebeneffekt zu verlassen. Ich glaube, das ist sauberer:

%Vor%

Sehen Sie sich Graemes Antwort an, wenn Sie lieber Wardens Callbacks verwenden möchten (Devise wird mit Warden implementiert).

    
Max Wallace 18.08.2016 12:12
quelle
3

Ich hatte die gleiche Frage, konnte sie aber nicht mit "warden.options" lösen, da diese in meinem Fall vor der Weiterleitung zur Aktion sessions#new gelöscht wurden. Nachdem ich einige Alternativen untersucht hatte, die ich für zu spröde hielt (weil sie dazu führten, dass einige Devise-Klassen erweitert und bestehende Methoden mit Aliasing versehen wurden), verwendete ich einige Callbacks von Warden . Es funktioniert besser für mich, da der Rückruf innerhalb des aktuellen Anfrage-Antwort-Zyklus aufgerufen wird und die Parameter alle im Objekt env beibehalten werden.

Diese Rückrufe werden benannt und scheinen so zu sein, dass sie diese und ähnliche Probleme lösen. Und sie sind dokumentiert!

Warden unterstützt die folgenden Rückrufe ab warden-1.2.3 :

  • after_set_user
  • after_authentication (nützlich für die Anmeldung erfolgreicher Anmeldungen)
  • after_fetch (Alias ​​für after_set_user )
  • before_failure (nützlich für die Protokollierung fehlgeschlagener Anmeldungen - Beispiel unten)
  • after_failed_fetch
  • before_logout
  • on_request

Jeder Callback wird direkt auf die Klasse Warden::Manager gesetzt. Um einen fehlgeschlagenen Authentifizierungsversuch zu verfolgen, fügte ich Folgendes hinzu:

%Vor%

Ich erwarte, dass Sie den before_logout -Rückruf auch verwenden können, um Abmeldeaktionen zu verfolgen, aber ich habe es nicht getestet. Es scheint auch prepend_ Varianten der Callbacks zu geben.

    
Graeme 20.10.2015 07:30
quelle
1

Für die Logout-Protokollierung müssen Sie das Destroy-Ereignis abfangen. Fügen Sie dem Session-Controller (aus der obigen Antwort) Folgendes hinzu:

%Vor%     
DeeY 19.10.2013 19:34
quelle