deviseを使ってユーザー管理機能を実装


devise

ユーザー管理機能を簡単に実装するためのGemです。実際に運用されている多くのRailsアプリケーションサービスで使用されています。

Gemfile
gem 'devise'
ターミナル
# Gemをインストール
% bundle install

Gemをインストールした後はrails sをcontrol + Cで一度停止し、サーバーを再起動する必要があります。
これは、インストールしたGemの反映するタイミングが、サーバー起動時だからです。

deviseの設定ファイルを作成

deviseを使用するためには、Gemのインストールに加え、 devise専用のコマンドで設定ファイルを作成する必要があります。

rails g devise:installコマンド

このコマンドは、追加したdeviseというGemの「設定関連に使用するファイル」を自動で生成するコマンドです。
現時点では、deviseを追加したら、最初に1度実行しておく程度の認識で問題ありません。

ターミナル
% rails g devise:install

deviseのUserモデルを作成

作成には通常のモデルの作成方法ではなく、deviseのモデル作成用コマンドでUserモデルを作成します。

rails g deviseコマンド

ユーザー機能の対象を指定することで、モデルとマイグレーションの生成やルーティングの設定などをまとめて処理します。
実行すると、モデルが生成され、routes.rbにはdeviseに関連するパスが追加されます。

ターミナル
# deviseコマンドでUserモデルを作成
% rails g devise user

テーブルを作成

rails g devise userコマンドで作成されたマイグレーションファイルは以下のように作成されています。

db/migrate/20XXXXXXXXX_devise_create_users.rb
class DeviseCreateUsers < ActiveRecord::Migration[6.0]
 def change
   create_table :users do |t|
     ## Database authenticatable
     t.string :email,              null: false, default: ""
     t.string :encrypted_password, null: false, default: ""

     ## Recoverable
     t.string   :reset_password_token
     t.datetime :reset_password_sent_at

     ## Rememberable
     t.datetime :remember_created_at

     # 省略

     t.timestamps null: false
   end

   add_index :users, :email,                unique: true
   add_index :users, :reset_password_token, unique: true
   # add_index :users, :confirmation_token,   unique: true
   # add_index :users, :unlock_token,         unique: true
 end
end

テーブルの設計が完了したら、マイグレーションを実行します。

ターミナル
% rails db:migrate

deviseのビュー作成

rails g devise:viewsコマンド

deviseに用意されたビューファイルをコピーし、app/viewsの配下に配置してくれるコマンドです。
HTMLを修正できるため、カスタマイズ可能になります。
deviseのコマンドで、devise用のビューファイルを生成します。

ターミナル
% rails g devise:views

上記のコマンドで以下のビューファイルが作成されます。
サインアップ画面はapp/views/devise/registrations/new.html.erb、ログイン画面のビューはapp/views/devise/sessions/new.html.erbというビューファイルが対応しています。
好みのビューにカスタマイズができます。

サインアップ時の名前登録

usersテーブルにカラムを追加する場合

rails g migrationコマンド

マイグレーションを生成するコマンドです。
マイグレーションはこれまで、rails g modelコマンドでモデルと一緒に生成されていましたが、すでに作成されたテーブルの内容を変更する際などに使用します。

rails g migration Addカラム名To追加先テーブル名 追加するカラム名:型とすることで、テーブルにカラムを追加する際に必要なコードが記述された状態で、マイグレーションが生成されます。
例としてカラム名nicknameを追加する場合

ターミナル
# usersテーブルにnicknameカラムをstring型で追加するマイグレーションファイルを作成
% rails g migration AddNicknameToUsers nickname:string

# 作成したマイグレーションを実行
% rails db:migrate

ストロングパラメーター設定

devise_parameter_sanitizerメソッド

deviseにおけるparamsのようなメソッドでdeviseのUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できます。

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
  end
end

:devise_controller?というdeviseのヘルパーメソッド名を指定して、もしdeviseに関するコントローラーの処理であれば、そのときだけconfigure_permitted_parametersメソッドを実行するように設定しています。他のtweetsコントローラーなどでは処理は読み込まれても、実行まではされません。

その他ログインの有無でビューを変更するなど書き換えたら、
ユーザー管理機能の基本は終了です。

以上備忘録でした。