🍎

【Rails】deviseのログイン方法変更(nameを使用)

2023/07/21に公開

はじめに

deviseを使って認証機能を実装します。
デフォルトは「メールアドレス」「パスワード」でログインできる状態になっているので、ユーザーがログインしやすいように、メールアドレスではなく「ユーザー名」と「パスワード」でログインできるように変更していきます!

  • devise導入済み
  • usersテーブルにnameカラム追加済み
  • サインアップページにname用のフォーム追加済み
  • 下記の続きです!

https://zenn.dev/h_hana/articles/fa30191b8d8ed9


1.deviseの初期設定ファイルを編集

  • deviseの設定に必要な記述は「config.」の形式で定義されている。
  • 以下のファイルを編集する
config/initializers/devise.rb
:
:
Devise.setup do |config|  
:
:
  # ==> Configuration for any authentication mechanism
  # Configure which keys are used when authenticating a user. The default is
  # just :email. You can configure it to use [:username, :subdomain], so for
  # authenticating a user, both parameters are required. Remember that those
  # parameters are used only when authenticating and not when retrieving from
  # session. If you need permissions, you should implement that in a before filter.
  # You can also supply a hash where the value is a boolean determining whether
  # or not authentication should be aborted when the value is not present.
  # config.authentication_keys = [:email]
:     
:
end
  • 上記最下部にある「 # config.authentication_keys = [:email]」これを編集!
      コメントアウトされている記述がたくさんあるので、その中から探し出す🔎
config/initializers/devise.rb
 # config.authentication_keys = [:email]
   ↓
 config.authentication_keys = [:name]
 
コメントアウトを外す
[:email] を[:name]に変更
  • 「config」=deviseの設定
  • 「authentication_keys」=ログイン認証に必要な鍵
     - デフォルトはemailになっているので、nameに変更

🌸deviseの初期設定の編集が完了!

2.ログインページにユーザー名のフォームを追加

デフォルトでは下記のように「email」用のフォームになっているので編集する

app/views/devise/sessions/new.html.erb
<h2>Log in</h2>

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
  <div class="field">                ←email用のフォームなのでこれを削除
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
  </div>

  <div class="field">
    <%= f.label :password %><br />
    <%= f.password_field :password, autocomplete: "current-password" %>
  </div>
:
:

app/views/devise/sessions/new.html.erb
<h2>Log in</h2>

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
  <div class="field">                 ←name用のフォームを追加
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true %>
  </div>

  <div class="field">
    <%= f.label :password %><br />
    <%= f.password_field :password, autocomplete: "current-password" %>
  </div>
:
:

3.ログインページ確認

configフォルダ以下を編集したので、$ rails s でサーバーを再起動して確認!


以上で「name」と「password」でログインできるようになりました!

ログインできない場合は、ターミナルに下記エラーが出ているはず。

ターミナル
↓赤文字で表示される
Unpermitted parameter: :name

その場合はconfig/initializers/devise.rbファイルの編集がうまくいっていない可能性があるので、再度確認!

Discussion