操作
バグ #705
完了ログイン失敗時に devise.failure.invalid の Translation missing が表示される
開始日:
2026/08/21
期日:
進捗率:
0%
予定工数:
説明
事象¶
管理画面のログインでパスワードを間違えると、フラッシュに以下がそのまま表示される。
Translation missing. Options considered were: - ja.devise.failure.administrator.invalid - ja.devise.failure.invalid
curl で再現確認済み(POST /administrators/sign_in に誤ったパスワード → HTTP 422、上記文字列がレスポンスに含まれる)。
原因¶
config/locales/devise.ja.yml に定義されているのは以下の 4 キーのみで、failure.invalid が無い。
failure.unauthenticatedfailure.timeoutsessions.signed_insessions.signed_out
devise 標準(en)と比較すると 34 キーが未定義。ただし本アプリで有効な devise モジュールは
database_authenticatable(supplier のみ rememberable を追加)だけなので、
confirmable / recoverable / registerable / lockable / omniauthable 系のキーは不要。
対応(実際に到達しうるキーのみ追加すれば足りる)¶
| キー | 発生条件 |
|---|---|
failure.invalid |
パスワード誤り(今回の事象) |
failure.not_found_in_database |
該当メールアドレスが存在しない |
failure.already_authenticated |
ログイン済みでログイン画面にアクセス |
failure.inactive |
active_for_authentication? が false |
sessions.already_signed_out |
未ログインでログアウト |
注意点:
failure.invalid/failure.not_found_in_databaseは%{authentication_keys}を補間する。 補間を使うならja.devise.failure側で語を用意するか、補間を使わない文面 (例: 「メールアドレスまたはパスワードが正しくありません。」)にする。- scope 付きキー(
administrator/supplier/user)は未定義でも汎用キーにフォールバックするため、 汎用のみ定義すれば 3 スコープすべてで解決する(failure.unauthenticatedと同じ方針)。 - request spec でログイン失敗時のフラッシュ文言を検証しておくと再発を防げる。
参考¶
操作