#導入
deviseを用いたログイン機能をアプリケーションに実装していきます。
##開発環境
ruby '2.6.5'
rails '6.0.0'
#実装開始
###deviseのインストール
deviseを使ったログイン機能には、最初に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の編集
追加したカラムの分だけ記入欄を追加していきます。
<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以外が許可されるように、カラム名を記述します。
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メソッドを呼び出しています。