mame  2022/03/28更新

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


Devise 名前でログイン

こんにちは!

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

  4. ログイン画面の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> ←削除

    お疲れ様でした。

    見づらくてすみません。マークダウンもっと勉強しなくっちゃ

    どこか間違っているところがありましたら、ご指摘宜しくお願い致します。

タイトルとURLをコピーしました