Deviseでnamespace使う場合はdevise_for :users, path: :adminとかしとけという話
メモ。
Devise使用時にroutesでadminとかのnamespaceにdevise_forを入れると,Devise::SessionsController等で authenticate_user! が authenticate_admin_user! とかなってしまう*1
# config/routes.rb namespace :admin do devise_for :users, controllers: { sessions: "admin/users/sessions", ...... } end
devise_for with namespace generate wrong methods · Issue #412 · plataformatec/devise · GitHub
こう書く。
# config/routes.rb devise_for :users, path: :admin, controllers: { sessions: "admin/users/sessions", ...... }
今回は諸事情があってDevise使ってるけど、認証はRails提供のsecure_passwordとか使って、自前で書いたほうがはまらなくていいと思う。大分楽に書けるようになったし。Deviseはカスタマイズしようとすると面倒くさい。
*1:注:カスタムしたコントローラーに任意のアクションを突っ込んでしまっているからです。