Mam następujące zadanie - muszę do aplikacji dołożyć wygasanie haseł po 90 dniach.
Z niefajnych rzeczy - aplikacja stoi na hobo - raczej tego nikt nie pochwala.
Podchodzę to tego w następujący sposób:
Dodaję w modelu pole pass_expires typu :date
Aby uniemożliwić użytkownikowi dostęp do aplikacji przed odświeżeniem hasła do application_controllera dopisuję
def pass_expires
if current_user.signed_up?
redirect_to :controller=>“users”, :action=>“account” #flash[:error] = “Debug msg”
end
end[/code]
Powyższy kod jeszcze nie ma warunku sprawdzenia, kiedy hasło wygasło, ale powinien każdego zalogowanego użytkownika przekierować na strone zgodnie z routesami:
Problem w tym, że dostaję z przeglądarki bład, że przekierowanie jest nieprawidłowe
Macie moze pomysł skąd bierze się takie zachowanie?
Teraz jeśli chciałbym sprawdzić, czy haslo wygaslo musze pobrać zawartość pola pass_expires.
Niestety wywołanie go przez current_user.pass_expires rzuca ‘NoMethodError in [model]sController’ ().
Jest to o tyle dziwne, że to current_user powinien jednoznacznie wyznaczac usera.
Dopisałem w modelu Users metody
[code]
def self.get_pass_expires()
return self.pass_expires #pole
end
def pass_expires
return User.get_pass_expires()
end[/code]
ale wołanie przez nie o potrzebną wartość do niczego nie prowadzi (zmienia odrobinę opis wyjątku)
Proszę o pomoc w pobraniu tej wartości
btw; ja bym nie pisał exceptów na poziomie application_controllera tylko uzył
skip_before_filter :pass_expires, :only => [....]
w users controllerze
Plus jest taki, że ignorujesz wtedy ten hook dla akcji o podanej nazwie w KONKRETNYM kontrolerze, a nie dla wszystkich akcji o danej nazwie ;).
Hmm… dojechałem do porządanych efektów, z tym, ze w momencie, gdy zmieniam hasło jestem redirectowany do ekranu zmiany hasła zanim wszystko się zapisze.
Zgodnie z radą sevosa - przerzuciłem sprawdzanie do user_controllera, ale efekt mam taki, że
dla before_filter + except działa to tak samo jak w application_controlerze, z tym, że mogę chodzić w każdą zawartość inną niż user (czyli źle)
dla skip_before_filter + only wydaje się, że nie działa wcale…