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
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.