Devise - śledzenie prób logowania

Witajcie
Mam za zadanie śledzenie każdego logowania użytkownika(z gemu devise) - tzn. zapisywanie informacji zarówno o poprawnym zalogowaniu, jak i nieudanej próbie zalogowania. Muszę logować ip, czas oraz status(udało się/nie udało się) każdej z prób.
Niestety, nie bardzo mam pomysł, jak coś takiego osiągnąć - devise :trackable nie wystarcza, nie potrafię znaleźć również odpowiednich callbacków. Przeglądałem wiki, rzuciłem okiem na parę forków devise i nie potrafię znaleźć rozwiązania.
Z góry dzięki za wszelkie podpowiedzi

A musisz device używać? Nie wystarczy before_filter i odpowiednia metoda w modelu?

A nie wystarczy zajrzeć w kod devise i znaleźć jaką metodę nadpisać ?

Ja bym poszedł w stronę:

[code]class SessionsController < Devise::SessionsController

def create
super
if current_user?
# Udało się
else
# Nie udało się
end
end

end[/code]

no właśnie (przynajmniej dla mnie) nie jest to takie proste :wink:

no niestety, nie działa.
Sprawdzone w bardzo prosty sposób:

def create logger.debug { "BEFORE!!!" } super logger.debug { "AFTER!!!" } end
w konsoli widzę tylko BEFORE!!!.
Próbowałem zrobić to przez after_filter w ten sposób:

[code] after_filter :check_user, :only => :create

def check_user
unless current_user.nil?
logger.debug { “\n\n OK !!! \n\n” }
else
logger.debug { “\n\n NIE OK !!! \n\n” }
end
end[/code]
jednak działa tylko dla poprawnej próby zalogowania.

To dlatego że pod spodem jest rzucany wyjątek jak nie zadziałało i łapany jest on na poziomie wardena w middleware.


https://github.com/hassox/warden/wiki/Callbacks <- To ci może dużo pomóc.

hmm, to wiele tłumaczy. Postaram się zatem ogarnąć to za pomocą wyjątków wardena -choć tak szczerze, to aż mi się nie chce wierzyć, że devise nie udostępnia żadnej metody, która byłaby wykonywana przy udanym/nieudanym logowaniu.