0
1

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 1 year has passed since last update.

【Ruby on Rails】deviseの導入から実装するまで

Posted at

目標

deviseを導入し実行できるまで

開発環境

ruby '3.1.2'
rails '7.0.3'

実装

devise導入から、実装までの一連の流れ

deviseをインストール

Gemfile.
gem 'devise'
ターミナル.
% bundle install

% rails g devise:install
rails g deviseコマンドは、deviseによるユーザー機能の対象を指定することで、モデルとマイグレーションの生成やルーティングの設定などをまとめて処理します。

実行すると、モデルが生成され、routes.rbにはdeviseに関連するパスが追加されます。

Userモデルを作成

ターミナル.
% rails g devise user

マイグレーションファイルを編集

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

     # 省略

end

nameカラムを追加

ターミナル.
% rails db:migrate

viewsを追加

ターミナル.
% rails g devise:views

deviseに用意されたビューファイルをコピーし、app/viewsの配下に配置してくれるコマンドです。
HTMLを修正できるため、カスタマイズ可能になります。

viewsを編集

app/views/devise/sessions/new.html.erb
<div class="contents row">
  <div class="container">
    <h2>Log in</h2>
    <%= form_with model: @user, url: user_session_path, id: 'new_user', class: 'new_user', local: true do |f| %>

      <div class="field">
        <%= f.label :name %><br />
        <%= f.text_field :name%>
      </div>
      <div class="field">
        <%= f.label :email %><br />
        <%= f.email_field :email, autofocus: true %>
      </div>

      <div class="field">
        <%= f.label :password %><br />
        <%= f.password_field :password, autocomplete: "off" %>
      </div>

      <% if devise_mapping.rememberable? %>
        <div class="field">
          <%= f.label :remember_me %><br />
          <%= f.check_box :remember_me %>
        </div>
      <% end -%>

      <div class="actions">
        <%= f.submit "Log in" %>
      </div>
    <% end %>
  </div>
</div>

nameカラムの記入欄を追加

モデルにバリデーションを記入

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :authenticate_user!
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end

application_controllerにbefore_actionを使用しているため、全てのアクションが実行される前に、実行されます。

before_action :authenticate_user!により、ログインしていないユーザーをログインページの画面に促すことができます。

configure_permitted_parametersで、configure_permitted_parametersメソッドを呼び出しています。

詳細.
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?