LoginSignup
1
0

More than 3 years have passed since last update.

devise導入方法【Ruby on Rails】

Posted at

導入

deviseを用いたログイン機能をアプリケーションに実装していきます。

開発環境

ruby '2.6.5'
rails '6.0.0'

実装開始

deviseのインストール

deviseを使ったログイン機能には、最初にGemfileを編集してからターミナルでコマンドを実行します。

Gemfile
gem 'devise'
ターミナル
% bundle install
% rails g devise:install

実行するとモデルが生成されます。そしてroutes.rbにdeviseに関連するパスが自動で追加されます。

Userモデルを作成

ターミナル
% rails g devise user

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

ユーザー登録で必要となるカラムを追加します。emailとpassworsはデフォルトで存在するので、それ以外の追加したいカラムを記述してきます。
次にターミナルでマイグレーションを実行します。

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
ターミナル
% rails db:migrate

viewsを追加

ターミナル
% rails g devise:views

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>

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

モデルにバリデーションを記述してデフォルトのemailとpassword以外が許可されるように、カラム名を記述します。

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メソッドを呼び出しています。

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