目標
deviseを導入し実行できるまで
開発環境
ruby '3.1.2'
rails '7.0.3'
実装
devise導入から、実装までの一連の流れ
deviseをインストール
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を編集
<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カラムの記入欄を追加
モデルにバリデーションを記入
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: [:許可するキー])