LoginSignup
1
1

More than 3 years have passed since last update.

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

Posted at

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コントローラーなどでは処理は読み込まれても、実行まではされません。

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

以上備忘録でした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1