ユーザー名での認証に切り替える(後半)
ビューの修正
ビューを修正する(下記以外に修正すべき箇所について要調査).
【手順】
vi app/views/devise/sessions/new.html.erb
vi app/views/devise/registrations/new.html.erb
vi app/views/devise/registrations/edit.html.erb
(それぞれ :email を :username に,:email_field を :text_field に修正)
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
↓
<div class="field">
<%= f.label :username %><br />
<%= f.text_field :username, autofocus: true,
autocomplete: "username" %>
</div>
vi app/views/devise/registrations/new.html.erb
vi app/views/devise/registrations/edit.html.erb
(それぞれ :username の箇所の下に,以下を追記)
<div class="field">
<%= f.label :fullname %><br />
<%= f.text_field :fullname, autocomplete: "fullname" %>
</div>
モデルの修正
「Email can’t be blank」のエラーが出てしまうので,モデルを修正する(抜本的な対処方法については要調査).
【手順】
vi app/models/user.rb
(以下を修正)
class User < ApplicationRecord
# …
devise :database_authenticatable, :registerable,
:rememberable, :validatable
def email_required?
false
end
end
データベースの更新
email欄は使っていないが,同じデフォルト値で登録しようとすると重複エラーが発生してしまうので,マイグレーションファイルの「ユニーク制約」を外す処理を行い,マイグレーションを実施する.
【手順】
bin/rails g migration remove_index_email_from_users
vi db/migrate/XXXXXXXXXXXXXX_remove_index_email_from_users.rb
(以下を追加)
class RemoveIndexEmailFromUsers < ActiveRecord::Migration[6.0]
def change
remove_index :users, :email
end
end
bin/rails db:migrate
ナビゲーションの追加
ビューにナビゲーションを追加する.
【手順】
vi app/views/layouts/application.html.erb
(以下を修正)
…(略)…
<body>
<header>
<nav>
<% if user_signed_in? %>
<%= link_to 'logout',
destroy_user_session_path, method: :delete %>
<% else %>
<%= link_to 'sign up', new_user_registration_path %>
<%= link_to 'login', new_user_session_path %>
<% end %>
</nav>
</header>
確認
サーバを起動し,ユーザー登録を試みる.複数のユーザーを登録できることを確認し,Railsコンソールで User.all を表示させることでデータベースに正しく登録されていることを確認する.
0 件のコメント:
コメントを投稿