scramble cadenza

技術ネタのガラクタ置き場

authlogic で blank の password で update 出来てしまう問題

イントロ

情報が古いけど

ruby on rails - changing password with authlogic - validation not catching blank inputs - Stack Overflow
と同じ現象。

改めてまとめると、以下の様な状態。

  1. authlogic でログインユーザーを作成
    • ログインユーザーは password を form に入力する
  2. ログインユーザーを編集する画面を作る
    • 新規作成ではないので注意
    • password を編集可能にする
  3. ログインユーザーを編集するとき、パスワードを空にして保存できてしまう

解決法

class User < ActiveRecord::Base
  acts_as_authentic do |c|
    c.ignore_password_blank = false
  end
end

とする。

よく見ると

https://github.com/binarylogic/authlogic/blob/23751e3eaba4c2b09751505079d7264fd1cc8b72/lib/authlogic/acts_as_authentic/password.rb#L44-L54

のコメントに書いてある。

前提条件も含めて説明すると...

  • 編集画面において、password を最初から入力済みにすることはできない
    • DB に保存されている password を復号することはできないため(暗号化方式によるが)
    • つまり編集画面を開いた直後はどうしても空になってしまう
  • 状況として「 password は変えたくないけど、ページを遷移してしまう」ケースが存在するだろう
    • どういうケースかは明記されてないけど、例えば間違って「更新」ボタンを押してしまったりするとか?
    • そうすると、空のパスワードが保存されてしまい、セキュリティ的に甘くなる
      • そういうケースは避けたい
      • オプションで変更できる

ということらしい。(多分)