ActiveRecordでパスワード(Password)を上手に保存する
(注)確認環境はRails2.0RC1ですが、多分1.2.XでもOK
やはりパスワードをDBに生でいれるのはどうかと思うので、
before_save {|user| user.password = Digest::SHA256.digest(user.password)}
こんな感じに書いてやりましたところ、新規登録時は問題ないのですが、パスワード以外のデータを更新したときにもパスワードが勝手に変わるようになってしまいました。これは
user = User.find[params[:id] ←ここでハッシュ変換済みのパスワードが呼ばれる user.attributes = params[:user] user.save! ←ここで再度ハッシュ化してしまう
というように、二重にロジックが通ってしまうようになるのが原因でした。そこで「パスワード(確認用)」のフィールドを新たに設けて以下のようにすることで解決。
before_save {|user| user.password = Digest::SHA256.digest(user.password) unless user.password_confirmation.blank?} validates_confirmation_of :password