2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

devise導入

Last updated at Posted at 2020-05-16

#deviseの使い方メモ

gemfileにdeviseというGemを追加。

gemfile
  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に以下のルーティングが自動的に追記されます。

config/routes.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

# 〜省略〜

モデルファイルにもきっちりバリデーションをかけておきましょう。

app/models/user.rb
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カラムの値を受け取れるように許可します。

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: [: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の導入の説明は終わります。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?