最近開発でDevise4.9.2を触れる機会があったので、備忘録を作成しました。
1. Deviseのインストール
GemfileにDeviseを追加
gem 'devise', '4.9.2'
以下のコマンドを実行してDeviseをインストール
bundle install
Deviseの初期設定を実施
rails generate devise:install
2. モデルの作成とマイグレーションの実行
Deviseを使用するモデルを作成
※ここでは、Userモデルを例にします。
rails generate devise User
※コマンドを実行すると、Userモデルとそれに関連するマイグレーションファイルが生成されます。生成されたマイグレーションファイルは、ユーザーの認証に必要な情報(メールアドレスやパスワードなど)をデータベースに保存するためのものです。
マイグレーションを実行して変更をデータベースに反映
rails db:migrate
3. Viewのカスタマイズ
Deviseは、ログインや登録などの一般的な認証ビューを提供しますが、これらをカスタマイズすることも可能です。以下のコマンドを実行すると、Deviseのビューファイルがアプリケーションのapp/viewsディレクトリにコピーされます。
rails generate devise:views
※このコマンドを実行すると、Deviseのビューファイルが生成され、これを自由にカスタマイズすることが可能になります。
画面名 | パス | View画面の格納場所 |
---|---|---|
メール確認要求画面 | /users/confirmation/new | app/views/devise/confirmations/new.html.erb |
メール確認指示 | メール | app/views/devise/mailer/confirmation_instructions.html.erb |
メール変更通知 | メール | app/views/devise/mailer/email_changed.html.erb |
パスワード変更通知 | メール | app/views/devise/mailer/password_change.html.erb |
パスワードリセット指示 | メール | app/views/devise/mailer/reset_password_instructions.html.erb |
アカウントロック解除指示 | メール | app/views/devise/mailer/unlock_instructions.html.erb |
パスワードリセット要求画面 | /users/password/new | app/views/devise/passwords/new.html.erb |
パスワードリセット画面 | /users/password/edit | app/views/devise/passwords/edit.html.erb |
ユーザー登録画面 | /users/sign_up | app/views/devise/registrations/new.html.erb |
ユーザー情報編集画面 | /users/edit | app/views/devise/registrations/edit.html.erb |
ログイン画面 | /users/sign_in | app/views/devise/sessions/new.html.erb |
共有エラーメッセージ部分テンプレート | 任意の画面 | app/views/devise/shared/_error_messages.html.erb |
共有リンク部分テンプレート | 任意の画面 | app/views/devise/shared/_links.html.erb |
4. Controllerのカスタマイズ
Deviseのコントローラーもカスタマイズ可能です。例えば、ユーザー登録後のリダイレクト先を変更したい場合などは、Deviseのコントローラーをオーバーライドする必要があります。
以下のコマンドで、Deviseのコントローラーを生成
rails generate devise:controllers users
※その後、生成されたコントローラーファイル (app/controllers/users/registrations_controller.rbなど)を編集することで、Deviseのデフォルトの挙動をカスタマイズできます。
5. ルーティングのカスタマイズ
Deviseのルーティングもカスタマイズ可能です。config/routes.rbファイルにて、Deviseのデフォルトルーティングを上書きすることが可能です。
以下に、Deviseのルーティングをカスタマイズする一例を示します。ここでは、ユーザーのサインアップとサインインのルートをカスタマイズしています。
devise_for :users, skip: [:sessions, :registrations]
as :user do
get 'signin', to: 'devise/sessions#new', as: :new_user_session
post 'signin', to: 'devise/sessions#create', as: :user_session
delete 'signout', to: 'devise/sessions#destroy', as: :destroy_user_session
get 'signup', to: 'devise/registrations#new', as: :new_user_registration
post 'signup', to: 'devise/registrations#create', as: :user_registration
end
以上がDevise (4.9.2)のインストールからカスタマイズまでの基本的な手順です。具体的な実装はアプリケーションの要件によりますので、適宜調整してください。