Railsアプリでユーザー管理できるgem!deviseの使い方

f:id:endoakak:20200727195612j:plain

deviseは、Railsで作成したアプリケーションにユーザー管理機能を実装することができるgemです。
今回はdeviseの使い方を簡単にまとめてみました。

deviseのインストール

まずはgemfileにdeviseを追加します。

gem 'devise'

そして、bundlerでインストールします。

% bundle install

次に、deviseの設定関連に必要なファイルを生成する必要があります。
以下のコマンドを実行すれば自動で生成してくれます。

% rails g devise:install

f:id:endoakak:20200728192505p:plain

こんな感じで表示されたら成功です。

Userモデルを作成

deviseを使ってモデルを作成するときは、少しだけ普段と異なる部分があるので注意が必要です。

deviseを使うときはrails g model userではなくrails g devise userとします。

% rails g devise user

このコマンドで生成されたマイグレーションファイルには、emailやpasswordなどが初めから記述されています。
nameカラムなど必要なカラムを付け足して、マイグレーションを行います。

% rails db:migrate

devise_for

deviseでモデルを作成すると、route.rbのファイルにdevise_forの記述が追加されます。

Rails.application.routes.draw do
  devise_for :users
end

devise_forはdeviseのヘルパーメソッドで、ユーザー管理に必要なルーティングを自動で設定してくれます。

f:id:endoakak:20200728193600p:plain

ビューファイルの作成

実はdeviseをインストールすると、サインイン、ログイン用のビューも自動で生成してくれます。
しかしものすごく質素なので、ビューファイルも自分で作成しましょう。

まずは以下のコマンドでビューファイルを生成します。

% rails g devise:views

以下のようにviewsフォルダの中にdeviseフォルダが生成されるので、必要なものを編集しましょう。

f:id:endoakak:20200729084956p:plain:h150

便利なヘルパーメソッド

deviseではいろいろなヘルパーメソッドが用意されているらしいですが、よく使いそうなものをまとめます。

authenticate_user!

ユーザーがログインしているかを確認して、ログインしていなければログイン画面へリダイレクトしてくれるメソッドです。

application_controller.rbなどに以下のように記述して使います。

class ApplicationController < ActionController::Base
  before_action :authenticate_user!
end

user_signed_in?

authenticate_user! と似ていますが、ユーザーのログイン状態を返してくれます。ログインしていればtrue、そうでなければfalseを返します。

ログインしているか否かで表示を変えたいときなどに使えます。

if user_signed_in?
  #処理
else
  #処理
end

current_user

現在ログインしているユーザーの情報を取得できます。
いちいちuser = User.find(params[:id])的なことをしなくてもいいのです。

devise_parameter_sanitizer (configure_permitted_parameter)

ストロングパラメーターの設定に使います。
デフォルトではemailとpasswordしか受け取れないので、nameやageなど必要なものを追加します。

class ApplicationController < ActionController::Base
  before_action :authenticate_user!
  before_action :configure_permitted_parameters, if: :devise_controller?

  private

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

まとめ

  • devise導入後は設定関連のファイルを生成する必要がある
  • モデルを作るときはdevise用のコマンドを使用
  • ビューファイルもdeviseのコマンドで作成できる
  • 便利なヘルパーメソッドがいろいろ

実際にはもっといろいろな機能があるみたいですが、基本的な使い方はこんな感じです。