#deviseの使い方メモ
gemfileにdeviseというGemを追加。
gem 'devise'
ターミナル内で該当ディレクトリ(今回はsample)へ移動し、
「bundle install」でGemをインストールしてから、
「rails g devise:install」を実行してdeviseの設定ファイルを作成しましょう。
$ cd ~/projects/sample
$ bundle install
$ rails g devise:install
新規作成されるファイル
- config/initializers/devise.rb
- config/locales/devise.en.yml
ファイルが作成されたのを確認できたら、
deviseのモデル作成用コマンドでUserモデルを作成しましょう。
rails g devise user
新規作成されるファイル
- app/models/user.rb
- db/migrate/20XXXXXXXXXXXX_devise_create_users.rb
- test/fixtures/users.yml
- test/models/user_test.rb
また、route.rbに以下のルーティングが自動的に追記されます。
devise_for :users
devise_forはユーザー機能に必要なルーティングを一度に生成してくれるdeviseのメソッドです。
usersテーブルにnicknameカラムを追加したい場合はマイグレーションファイルに付け足します。
もしnicknameで検索をかける機能を追加する場合はindexも貼りましょう。
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :nickname, null: false
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
# 〜省略〜
end
#後々、検索機能を実装しnicknameカラムで検索をかける場合は下記も追記する。
add_index :users, :nickname, unique: true
# 〜省略〜
モデルファイルにもきっちりバリデーションをかけておきましょう。
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :nickname, presence: true, uniqueness: true
end
そしてターミナルにてマイグレーションを実行します。
rails db:migrate
deviseを用いてログイン機能を実装した場合のパラメータの受け取り方は通常とは異なります。
ログイン時に送られてくるパラメータを制限するストロングパラメータはdeviseのGem内に記述されているため編集することはできません。
そこでdeviseが提供している「configure_permitted_parametersメソッド」を利用してフォームからnicknameカラムの値を受け取れるように許可します。
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
end
end
これでnicknameカラムに値を送れるように許可できたので、サインアップ画面にニックネームのフォームを追加するためにビューファイルを変更します。
ビューファイルに変更を加えるにはdeviseのコマンドを利用してビューファイルを生成する必要があります。
$ rails g devise:views
上記の作業でdevise用のビューファイルを生成することができました。
生成されたビューファイルを編集して、サインアップ画面にnickname用のフォームを追加したり、レイアウトを好みに変更していきます。
サインアップ画面は
- app/views/devise/registrations/new.html.erb
ログイン画面は
- app/views/devise/sessions/new.html.erb
というビューファイルが対応しています。
以上でdeviseの導入の説明は終わります。