authlogic で blank の password で update 出来てしまう問題
イントロ
情報が古いけど
改めてまとめると、以下の様な状態。
authlogic
でログインユーザーを作成- ログインユーザーは
password
を form に入力する
- ログインユーザーは
- ログインユーザーを編集する画面を作る
- 新規作成ではないので注意
password
を編集可能にする
- ログインユーザーを編集するとき、パスワードを空にして保存できてしまう
validates_length_of
は何も設定しないなら 4 文字が minimum なので、空で保存できるのはおかしい- https://github.com/binarylogic/authlogic/blob/23751e3eaba4c2b09751505079d7264fd1cc8b72/lib/authlogic/acts_as_authentic/password.rb#L95
解決法
class User < ActiveRecord::Base acts_as_authentic do |c| c.ignore_password_blank = false end end
とする。
よく見ると
のコメントに書いてある。
前提条件も含めて説明すると...
- 編集画面において、
password
を最初から入力済みにすることはできない- DB に保存されている
password
を復号することはできないため(暗号化方式によるが) - つまり編集画面を開いた直後はどうしても空になってしまう
- DB に保存されている
- 状況として「
password
は変えたくないけど、ページを遷移してしまう」ケースが存在するだろう- どういうケースかは明記されてないけど、例えば間違って「更新」ボタンを押してしまったりするとか?
- そうすると、空のパスワードが保存されてしまい、セキュリティ的に甘くなる
- そういうケースは避けたい
- オプションで変更できる
ということらしい。(多分)