🍎
【Rails】deviseのログイン方法変更(nameを使用)
はじめに
deviseを使って認証機能を実装します。
デフォルトは「メールアドレス」「パスワード」でログインできる状態になっているので、ユーザーがログインしやすいように、メールアドレスではなく「ユーザー名」と「パスワード」でログインできるように変更していきます!
- devise導入済み
- usersテーブルにnameカラム追加済み
- サインアップページにname用のフォーム追加済み
- 下記の続きです!
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