before_update i porównywanie haseł

Witajcie
chcę sobie zrobić metodę, która sprawdza, czy user podał stare hasło, i jeśli jest ono zgodne z tym zapisanym w bazie, to chcę pozwolić na zmianę hasła.

[code] before_update :check_password

def check_password
unless self.old_password.empty?
if self.old_password == #(1).password
# tutaj reszta
end
end

end[/code]
może mi ktoś jednak powiedzieć, w jaki sposób odwołać się do aktualnego pola password w bazie?

Sprawdź coś takiego:

[code]def check_password
unless self.old_password.empty?
if sprawdz_poprawnosc_hasla(self.old_password)
# tutaj reszta
end
end
end

def sprawdz_poprawnosc_hasla(pass)
return if pass.blank?
Digest::SHA1.hexdigest(pass) == self.crypted_password // albo inne kodowanie, porównanie podanego hasła z tym zakodowanym w bazie :slight_smile:
end[/code]
Hmm, oto moja metoda do sprawdzania poprawności starego hasła przy aktualizacji na nowe:

[code]attr_accessor :old_password

validates_presence_of :old_password, :if => :old_password_required?

def old_password_required?
if self.old_password
errors.add(:old_password, ‘is incorrect!’) unless password?(self.old_password)
end
end[/code]
Czekam na sugestie o poprawności jej napisania bardziej doświadczonych koderów :slight_smile: