deviseを使いこなそう!
deviseの導入
以下の手順で導入できます
1. gemインストール
2. モデル作成
3. カラム追加
gemのインストール
まずgemをインストールしましょう
Gemfileに以下の記述を追記しましょう
gem 'devise'
bundle install
もお忘れなく!
bundle install
deviseをアプリケーションに適応させましょう
rails generate devise:install
モデルの作成
まずモデルをターミナルから作成するときの文法は以下の通りです
rails generate devise MODEL
これを参考にUserモデルを作成しましょう
rails generate devise User
これでモデル、マイグレーションファイルが作成されました
まず、deviseで作成したモデルの初期設定をしましょう
以下の記述を追加しましょう
devise :database_authenticatable, :registerable, :confirmable, :recoverable, stretches: 13
次はテーブルを作成しましょう
カラムを追加するため、まだマイグレーションはしないでください
カラムの追加
マイグレーションファイルに
t.string :username
を追加しましょう
deviseはデフォルトではメールアドレスとパスワードしか登録することができません
追加したusername
を新規登録、ログイン時に保存できるようにしましょう
以下の記述を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に関わるルーティングを設定しましょう
ルーティングファイルに以下の記述を追記しましょう
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後のパスの設定
新規登録、ログイン、ログアウト時にリダイレクトするパスを設定しましょう
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でログイン後のパスを変える必要があると思います
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
はログインしたモデルの名前です
疑問、気になるところございました、質問、コメントよろしくお願いします!!!