お世話になります。
現在、Devise を利用して、ユーザー認証機能を作っていますが、手詰まりになりました。
状況説明が長文になっています。ご容赦ください。
状況
まず、要件として、
- パスワード再発行(トークンメール送信→再設定)
- パスワード変更(ログイン中のユーザーが行う。現在パスワードの入力チェックを含む)
があります。
Devise のデフォルトの機能で、パスワード再発行は出来ました。
パスワード変更の実装のため、Devise::RegistrationControllerの機能のうち、
パスワードの認証機能のみを切り出して利用しようと考えました。
(デフォルトで、現在パスワードの入力チェックが存在するので流用したいです)
なお、現在のルーティングは下記です。
new_user_password GET /users/password/new devise/passwords#new edit_user_password GET /users/password/edit devise/passwords#edit user_password PATCH /users/password devise/passwords#update " PUT /users/password devise/passwords#update " POST /users/password devise/passwords#create
問題
私は初心者なので、感覚上ですが、devise/passwords#edit を利用できるのが理想と考えました。
ここで、ネームスペースがバッティングするという問題にぶちあたりました。
前述のように、Devise のデフォルト機能を利用したルーティングが陣取っています。
password の各アクションには、Devise:PasswordController を継承したコントローラが割り振られています。
※ 以後は "Devise::" は省略します。
考えた解決策
3つほど解決策を考えましたが、どれもしっくりきません。
- password ネームスペース配下で、別名のアクションを作る。(#manually_edit など)
→ PasswordController を継承したコントローラが受け取るため、RegistrationController の機能が利用できません。
- 上記 1. のように、別名のアクションを作ったうえで、コントローラを別途作成して割り振る。
→ 現実的な解決策のように思いますが、URL(Path)とコントローラの関係性が崩れて、保守性を欠くように思います。
- PasswordController の継承クラス上で、RegistrationController と同様の機能を作る。
→ どのような弊害が起きるかわからず、また コントローラの肥大化を招きそうなので、避けたいです。
質問
こういう場合、やはりネームスペースのこだわりを捨てて、login_user/password#edit などを作るほうが現実的でしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。