deviseのdevise_forで定義されたルーティングで、現段階では必要ないと思われるルーティングが定義されていたので、どのように不必要なルーティングを外すかを調べました。
なお、当方初学者であるため、もし間違っている箇所があればこっそり教えていただけると非常に助かります!
前提
$ rails g devise User
を行って、自動で該当のモデルファイルが生成され、加えてconfig/routes.rb
にdevise_for :users
が加えられている状態とします。
起こっていた事象
devise_for :users
によって生成されるルーティングは以下のように、一括でルーティングが行われていることが確認できます。
最初の初期段階では簡易的に実装するため、メールアドレスとパスワードの新規登録・ログインの際の「パスワードリセット機能」や「メールアドレス認証機能」のルーティングが必要ないと考えました。
普通ならルーティングの画面から不必要なルーティングを外せばいいのですが、今回はdevise_for :users
で一括でルーティングが定義されていたため、どのようにすれば該当のルーティングを外せるのかを調べました。
解決
結論としては、「該当のモデルファイルの中にあるdeviseモジュールを削除」すればいいということになります。
公式の詳細なドキュメントには以下のように書かれています。
This method is responsible to generate all needed routes for devise, based on what modules you have defined in your model.
このメソッドは、モデルで有効にしている Devise のモジュールに基づいて、必要なルートをすべて生成します。
つまり、今回のUserモデルでいうと、以下の箇所にdeviseの有効化したいモジュールが記述されているため、そこから「パスワードリセット機能(:recoverable)」と「メールアドレス認証機能(:confirmable)」を一旦削除するようにすれば良いということです。
class User < ApplicationRecord
# ここで有効化されたモジュールを基にルーティングが生成されている
devise :database_authenticatable, :registerable,
:rememberable, :validatable
end
モジュールを外したのでルーティングを改めて確認すると、該当のルーティングが消えていることが分かります。
これで初期段階では未実装のままにしておくページにユーザーが間違ってアクセスすることがなくなりました。
deviseのモジュールを活用する
ここまではdeviseのモジュールを有効化されている中から外す方法についてでしたが、逆も然りでそこにモジュールを追加すれば、新しくルーティングを生成してくれます。
deviseには他にもアカウントロック機能など、10個の便利なモジュールが用意されています。
それぞれの特徴については以下の公式のREADMEから確認することが出来るので、使えそうなモジュールがあれば先程のモデルファイルにモジュールを追加することで、ルーティングも自動的に生成してくれます。