Walidacje

Tworząc prosty system logowania natknąłem się na coś takiego
Mam możliwość zmiany hasła użytkownika, hasło jest trzymane w bazie danych jako sha1 tworzona z (password + salt) (sól generowana przy tworzeniu użytkownika oraz przy zmianie hasła). Czy można w jakiś sposób dodać walidację długości hasła? validates_length_of :password nie działa, bo długość jest zawsze 40 jako że to hash sha1.

Pozdrawiam,
msq

P.S. Szkoda trochę widzieć, że na głównej stronie nic się nie dzieje.

Twórz skrót dopiero po walidacji, w before_save. Zabezpiecz warunkiem, że długość jest mniejsza niż 40 (czyli obrabiamy tylko otwarty tekst).

No tak, rozwiązanie proste jak na ruby przystało :slight_smile:
Dzięki za pomoc!

Czy w w logowaniu użytkownika powinno się używać flash[:notice] w przypadku błędnych danych, czy tworzyć validations?

np. coś w stylu
unless @user.password == params[:password]
@user.errors.add(“Ha!”)
end

Zdaje się że bardziej “rails-way” jest to drugie rozwiązanie, ale pytam bardziej doświadczonych :slight_smile:

P.S.
I jeszcze jedno pytanko: jak walidować pola, które nie są w modelu a tylko w formularzu (na przykład chcę dodać użytkownika, tylko gdy wpisze ten sam mail do pól “password” i “password_confirm” ale “password_confirm” nie ma w modelu)

OK, odpowiadam sam sobie, być może ktoś skorzysta.
Żeby walidować pola, wystarczy dodać w modelu
attr_accessor :nazwa_pola
wtedy tworzymy w modelu takie pole i możemy na nim wykonywać co nam się podoba :slight_smile:

Przykładową implementację znajdziesz w RESTful Authentication.