#はじめに
ご意見、ご要望があれば是非コメントください!
また、こうしてほしい!やこれ教えて!といったリクエストについてもお待ちしております!
#deviseとは
deviseとは、ユーザ管理機能(例:ログイン、ログアウト、新規登録)を簡単に実装できてしまうgemのことです。
#前提条件
・基本的なrailsの仕組みを理解していること
・本記事では導入から簡単な仕組み説明をいたします
#さっそく導入してみよう
まずは、gemをインストールします。
gem 'devise'
このとき、deviceとしないように注意してください、私はしました(笑)
では、以下のコマンドを打ってください。使用するアプリディレクトリでおこなってください
bundle install
このあと、一旦rails sでサーバを起動させましょう
#deviseの設定ファイルを作成
以下のコマンドを打ってください。
これはdeviseに関する設定ファイルを自動生成してくれるコマンドになります。
rails g devise:install
これで一旦、事前準備は終了です。
#Userモデルの作成をする
ここからモデルを作成していきましょう
今回は、ユーザ管理を行うためのモデルをUserとします。
通常であれば、
rails g model user
としますが、deviseの場合は以下のようにします
rails g devise user
rails g deviseコマンドという、モデルとマイグレーションの作成やルーティング設定をまとめてしてくれます。
Rails.application.routes.draw do
devise_for :users #追加された部分
root to: 'tweets#index'
resources :tweets
end
devise_forはメソッドの1つで、ユーザ管理機能における複数のルーティングを一気に作ってくれます。
ただこの段階では、当然モデルを作成してませんので、rails sしてもエラーが出ます
さて、先ほど作成したモデルのマイグレーションファイルを見てみましょう
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: ""
t.string :name, null:false #自分で追加したカラム
## 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
うまくできていれば、こんな感じになっているかと思います。
デフォルトで既にカラムが設定されていますので
新たに欲しいカラムがあれば、自分で追加しておきましょう。(今回は7行目にnameカラムを追加しています)
#Viewを作成しよう
続いて、viewファイルを作ってみましょう。実はdeviseはもともと用意してくれてます。
以下のコマンドを打ってみてください。
rails g devise:views
このコマンドはapp/viewsにdeviseがもつデフォルトのviewファイルをコピーして配置してくれます。
例えば、
サインアップ画面→app/views/devise/registrations/new.html.erb
ログイン画面のビュー→app/views/devise/sessions/new.html.erb
というビューファイルが対応しています。
気になる方は実際に触ってみて確認してください。
変更を加えてみるのも面白いです!
#ところで、コントローラ設定は、、、!?
お気づきの方もいるかと思いますが、
コントローラーの設定をしてないですよね!?
実は、deviseのコントローラーはGemに記載されているので編集ができません!!!!
じゃあどうするのか、application_controller.rbを使用しましょう!!
#application_controller.rbからコントローラをいじる
上述したように、deviseのコントローラは直接編集できません。
そこでapplication_controller.rbを使用します。
application_controller.rbは言ってみればコントローラ界の王です。
すべてのコントローラが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
一個づつ説明します。
まずはメソッドについて。
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
end
end
devise_parameter_sanitizerはdeviseにおけるparamsのようなメソッドです。
deviseのUserモデルに関する「ログイン」「新規登録」などのリクエストからパラメーターを取得できます。
記載の仕方は、
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
:deviseの処理名の一例は以下です。
処理名 | 役割 |
---|---|
:sign_in | ログイン処理 |
:account_update | ユーザ情報更新 |
許可するキーは今回、デフォルト以外で設定したnameキーを指定しています。
deviseを使っているのでこういったメソッドを使用しますが、使っていなければ
params.require(:user).permit(:~,:~)とできますね。
続いて、before_actionについてですが、これを設定しておけば、各コントローラよりも先に指定のアクションを行ってくれます。
before_action :configure_permitted_parameters, if: :devise_controller?
ただし、毎回全てのコントローラの前に、このbefore_actionを実行する必要はないので
if: :devise_controller?で、deviseのコントローラに対してのみ行うようにします。
なお、:devise_controller?はdeviseのヘルパーメソッドです。
#終わりに
以上、deviseの紹介についてでした。
deviseを導入すると今回紹介したこと以外にもcurrent_userが使えたりなど便利なものが多いので
是非調べて実践してみてください。
LGTMもお待ちしております!