LoginSignup
1
2

More than 3 years have passed since last update.

【Rails】Gem deviseを使いこなす!!

Last updated at Posted at 2019-10-03

deviseを使いこなそう!

deviseの導入

以下の手順で導入できます
1. gemインストール
2. モデル作成
3. カラム追加

gemのインストール

まずgemをインストールしましょう
Gemfileに以下の記述を追記しましょう

Gemfile
gem 'devise'

bundle installもお忘れなく!

ターミナル
bundle install

deviseをアプリケーションに適応させましょう

ターミナル
rails generate devise:install

モデルの作成

まずモデルをターミナルから作成するときの文法は以下の通りです
rails generate devise MODEL
これを参考にUserモデルを作成しましょう

ターミナル
rails generate devise User

これでモデル、マイグレーションファイルが作成されました

まず、deviseで作成したモデルの初期設定をしましょう
以下の記述を追加しましょう

app/models/user.rb
devise :database_authenticatable, :registerable, :confirmable, :recoverable, stretches: 13

次はテーブルを作成しましょう
カラムを追加するため、まだマイグレーションはしないでください

カラムの追加

マイグレーションファイルに
t.string :usernameを追加しましょう

deviseはデフォルトではメールアドレスとパスワードしか登録することができません
追加したusernameを新規登録、ログイン時に保存できるようにしましょう
以下の記述をapplication_controller.rbに追加しましょう

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

  protected

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

deviseのコントローラーを実行する前にconfigure_permitted_parametersを実行する
ようにします

configure_permitted_parameters
deviseのパラメーターとしてsign_up時にusernameを許可する
deviseのパラメーターとしてsign_in時にusernameを許可する

最後にマイグレーションしましょう

ターミナル
rails db:migrate

以上でテーブルが作成されました

ルーティングの設定

deviseに関わるルーティングを設定しましょう
ルーティングファイルに以下の記述を追記しましょう

config/routes.rb
devise for :users

deviseで使えるヘルパーの紹介

deviseで作成されたモデルには以下のヘルパーを使用することができます
※ただし、以下のヘルパーはモデル名がUserの場合です

before_action :authenticate_user!
ユーザー権限のヘルパーです。
コントローラーに記述することで、
ログインしていない時にコントローラーのアクションを実行しようとすると、
ログイン画面に飛ばすことができます

user_signed_in?
ユーザーがログインしているかどうかの判定をするヘルパーです
ture,falseで返ってくるためビューやコントローラーでif文で条件分岐が可能になります

current_user
ログインしているユーザーの情報を取得できます

もし、モデルがMemberの場合
ヘルパーの使い方は以下のようになります
before_action :authenticate_member!
member_signed_in?
current_member

sign_in,sign_up後のパスの設定

新規登録、ログイン、ログアウト時にリダイレクトするパスを設定しましょう

app/controllers/application_controller.rb

def after_sign_in_path_for(resource)
    root_path
end

def after_sign_out_path_for(resource)
    root_path
end

ログイン、登録画面のビューの編集

ログイン、登録画面を編集していきましょう
以下のコマンドでUserモデルに関するviewファイルが作成されます

ターミナル
rails generate devise:views users

作成されたビューファイルを自由に編集することができます

2つのdeviseモデルがある時にそれぞれのパスの設定

WebサービスにはUser(利用者)とAdmin(管理者)があると思います
以上の場合、UserとAdminでログイン後のパスを変える必要があると思います

app/controllers/application_controller.rb
def after_sign_in_path_for(resource)
    case resource
    when Admin then
        admins_root_path
    when User then
        users_root_path
    end
end

ログイン時のルーティングを設定する場合を例に説明します
resource
Adminの場合、admins_root_pathにリダイレクトする
Userの場合、users_root_pathにリダイレクトする

resourceはログインしたモデルの名前です

疑問、気になるところございました、質問、コメントよろしくお願いします!!!

1
2
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
2