ruby on rails - Updating password with BCrypt -
when login username , password bcrypt checks no problem, fine.
but when go through process of recovering password , try login new password bcrypt never returns true.
the code have follows:
before_save :encrypt_password before_update :encrypt_password def authenticate player = player.find_by(mail: self.mail) unless player.nil? current_password = bcrypt::password.new(player.password) if current_password == self.password player else nil end end end private def encrypt_password unless self.password.nil? self.password = bcrypt::password.create(self.password) end
i'm using rails 4
you don't need before_update
callback.
when creating new record (user in case), before_save
triggered. right behavior.
but when updating record, both before_update
, before_save
triggered, means password
column encrypted twice. that's why unexpected behavior.
check this page more information callbacks.
what's more, think it's bad idea make password
real column in database. need column called encrypted_password
in database , making password
virtual attribute.
so can write encrypt_password
method this:
def encrypt_password unless self.password.nil? self.encrypt_password = bcrypt::password.create(self.password) end
which gave no chance make mistake made.
Comments
Post a Comment