プロジェクト

全般

プロフィール

バグ #705

完了

ログイン失敗時に devise.failure.invalid の Translation missing が表示される

本間 紀史 さんが8日前に追加. 8日前に更新.

ステータス:
終了
優先度:
通常
担当者:
開始日:
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.unauthenticated
  • failure.timeout
  • sessions.signed_in
  • sessions.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 でログイン失敗時のフラッシュ文言を検証しておくと再発を防げる。

参考

他の形式にエクスポート: Atom PDF