🐣

[Ruby on Rails] Devise 名前でログイン

2022/04/11に公開

Dviseのデフォルトでは、メールアドレスとパスワードでログインするようになっている部分を、  
名前でログインするようにしていきます。

開発環境

Rails6.1.4
Ruby2.6.3

本題

※deviseを導入済みの前提で記述しております。
 deviseの導入をまだ済んでない方は、1つ前のブログ「deviseの導入方法」についてを
参考にして頂けると、今回の内容を実装しながら出来きます。

  1. 新規登録が画面に名前を送るフォームを追加
    app/views/users/registrations/new.html.erb

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

    ※emailのフィード内のautofocus: trueを削除します。
    autofocusとは
    入力フォームに自動的にカーソルを表示すること。
    今回は名前がを先に入力するので、名前の方に指定します。

  2. 新規登録の際に名前を送っていいように許可
    ※フォームを加えただけでは名前は保存されないです。
    config/initializers/devise.rb  
    config.authentication_keys = [:name] ←emailからnameへ変更
    ユーザー認証時に使用するキーの設定をしています。

  3. emailの値も認証につかえるようにする
    app/controllers/application_controller.rb

class ApplicationController < ActionController::Base  
  before_action :configure_permitted_parameters, if: :devise_controller?     
  ¦    
  private  
  ¦  
  def configure_permitted_parameters  
    devise_parameter_sanitizer.permit(:sign_up,keys:[:email])  ←ここです
  end  
end  
  1. ログイン画面のemailで送るフォームをnameで送るフォームに変更
    app/views/users/sessions/new.html.erb
 <div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name, autofocus: true, autocomplete: "name" %>  
 </div>  ←追加  
 <div class="field">
   <%= f.label :email %><br />
   <%= f.email_field :name, autocomplete: "email" %>
 </div>  ←削除
 

お疲れ様でした。
見ずらくてすみません。
マークダウンもっと勉強しなくっちゃ
記述に誤りがありましたら、ご指摘宜しくお願い致します。

Discussion