0
0

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の導入方法について

Posted at

はじめに

本日は、deviseの導入方法を記事にしたいと思います。
deviseとはログインやサインアップが実装できるGemです。
Gemを導入するだけで簡単にユーザー管理機能が実装できます。

手順
1.deviseのインストール
2.テーブル作成
3.viewの作成
4.ストロングパラメーターの設定

バージョン

・Ruby 2.6.5
・Rails 6.0.0

deviseのインストール

まずは、Gemfileに

Gemfile

gem 'devise'

こちらを記述し、

# Gemをインストール
% bundle install

ターミナルよりインストールを行います。

次に、deviseの設定ファイルを作成します。

# deviseの設定ファイルを作成
% rails g devise:install

このコマンドは、追加したdeviseというGemの「設定関連に使用するファイル」
を自動で生成するコマンドです。

次にUserモデルを作成します。

# deviseコマンドでUserモデルを作成
% rails g devise user

すると、以下のようなログが表示されます

 invoke  active_record
      create    db/migrate/20200309082300_devise_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      insert    app/models/user.rb
       route  devise_for :users

ユーザーに関するモデルやマイグレーションも自動生成してくれます。

また、routes.rbのファイルをみてみると、

routes.rb

Rails.application.routes.draw do
  devise_for :users

#以下省略
end

ルーティングが自動追記されています。
これで、deviseの導入は完了です。

テーブルの作成

次にテーブルを作成します。

2021xxxxxxx_devise_create_user.rb

class DeviseCreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :nickname,           null: false
      t.string :profile,            null: false
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

#以下省略
end

deviseを導入すると、デフォルトでemailとpassword、再passwordの
カラムは設定されています。
それ以外にカラムが必要でしたら、マイグレーションファイルに記述します。
今回は、nicknameとprofileのカラムを追加しました。

設計しまいたら、マイグレーションを実行します。

# マイグレーションを実行
% rails db:migrate

これで、テーブル作成は完了です。
マイグレーションを行ったらサーバーを再起動させます。

ビューの作成

deviseを導入すると、ログイン、サインアップの画面が自動生成されますが
ビューファイルとしては生成されません。
deviseのビューファイルに変更を加えるためには、deviseのコマンドを利用して、ビューファイルを生成する必要があります。

% rails g devise:views

deviseのコマンドで、devise用のビューファイルを生成します。

ファイルを生成したら自身でファイルを編集します。

views/devise/registrations/new.html.erb


<div class="main">
  <%= render partial: "posts/header"%>
  <div class="inner_login">
    <div class="form__wrapper">
      <h2 class="page-heading">新規登録</h2>

        <%= form_with model: @user, url: user_registration_path, local: true do |f| %>
        <%= render 'posts/error', model: f.object %>

        <div class="field">
          <%= f.label :email, "メールアドレス", class: :form__text_1 %><br />
          <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
        </div>

        <div class="field">
          <%= f.label :password, "パスワード(半角英数混合6文字以上)", class: :form__text_1 %><br />
          <%= f.password_field :password, autocomplete: "new-password" %>
        </div>

        <div class="field">
          <%= f.label :password_confirmation, "パスワード再入力", class: :form__text_1 %><br />
          <%= f.password_field :password_confirmation, autocomplete: "new-password" %>
        </div>

        <div class="field">
        <%= f.label :image, "プロフィール写真" ,class: :form__text_1 %><br />
        <%= f.file_field :image %>
        </div>

        <div class="field">
          <%= f.label :nickname, "nickname",class: :form__text_1 %><br />
          <%= f.text_field :nickname %>
        </div>

        <div class="field">
          <%= f.label :profile, "プロフィール(自分を一言で表現してください)" ,class: :form__text_1 %><br />
          <%= f.text_area :profile, class: :form__text %>
        </div>

        <div class="actions">
          <%= f.submit "新規登録", class: :form__btn  %>
        </div>
      <% end %>
    </div>
  </div>
</div>

こちらは、新規登録のビューです。
nickname、profile、email、password、再password
プロフィール写真(Active Storage)の記述を行いました。

※プロフィール写真に関してはここでは、無視してください。

ストロングパラメーターの設定

deviseの処理を行うコントローラーはGem内に記述されているため、編集することができない
ため、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, :profile, :image])

  end
end

before_actionの記述は、もしdeviseに関するコントローラーの処理であれば、そのときだけconfigure_permitted_parametersメソッドを実行するように設定したものです。

devise_parameter_sanitizerメソッド
deviseが提供しているメソッドでこれにより、新規登録のパラメーターを取得できます。
permitの引数には、第一引数に処理名、第二引数に許可するキーを記述します。

permit(:deviseの処理名, keys: [:許可するキー])

今回は新規登録時に、nicknameとprofileとimageを許可する設定をしました。
デフォルトのemailやpassword以外にカラムを設定した場合はこの記述が必要
となります。

以上がdeviseの導入と設定の手順です。
deviseを導入すると使えるようになるメソッドなんかもあり
とても便利です。
興味ある方は調べてみてください。

まだまだ、初心者なので不備があるかもしれません。
その際は、コメントいただければ幸いです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?