Rails + Deviseでは、ModelにDeviseのモジュールを組み込むと、自動的に routes へ URI Pattern が追加されます。
例えば、
Rails.application.routes.draw do root to: 'home#index' devise_for :users end
な routes.rb の時、DeviseのModelが
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, # :confirmable, :validatable, :lockable end
な場合、
% bin/rails routes
...
user_registration PATCH /users(.:format)
PUT /users(.:format)
DELETE /users(.:format)
POST /users(.:format)
new_user_unlock GET /users/unlock/new(.:format)
user_unlock GET /users/unlock(.:format)
となります。
この状態で、Deviseの Confirmable のコメントアウトを外し
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :confirmable, :validatable, :lockable end
とすると
% bin/rails routes
...
user_registration PATCH /users(.:format)
PUT /users(.:format)
DELETE /users(.:format)
POST /users(.:format)
new_user_confirmation GET /users/confirmation/new(.:format) # 追加
user_confirmation GET /users/confirmation(.:format) # 追加
POST /users/confirmation(.:format) # 追加
new_user_unlock GET /users/unlock/new(.:format)
user_unlock GET /users/unlock(.:format)
になります。
ただ、
Confirmableモジュールは使いたいURI Patternを追加したくない
の場合はどうすればよいか迷ったため、メモを残します。
目次
環境
- Rails 6.1.3.2
- Devise 3.8.0
対応
routes.rb の devise_for の skip を使います。
ruby on rails 3 - How do I remove the Devise route to sign up? - Stack Overflow
例えば、Modelが
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :confirmable, :validatable, :lockable end
の時に、routes.rbを
Rails.application.routes.draw do root to: 'home#index' devise_for :users, skip: ['confirmations'] # 追加 end
とすると、
% bin/rails routes
...
user_registration PATCH /users(.:format)
PUT /users(.:format)
DELETE /users(.:format)
POST /users(.:format)
new_user_unlock GET /users/unlock/new(.:format)
user_unlock GET /users/unlock(.:format)
confirmable のURI Patternがなくなりました。