目次
目標
deviseにおいてのログイン機能で、名前とパスワードでログインできるようにする。
deviseを導入したデフォルトではEメールとパスワードでログインできるようになっています。
環境
mac OS Ventura 13.3
cloud9
Rails 6.1.7
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
git version 2.39.2
devise導入
実装
※deviseは導入済みの前提です!
モデル名は任意ですが、例えば「User」の場合、Userテーブルに「name」のカラムを追加するか、すでに追加しているか確認してください。
- deviseのviewページの作成
rails g devise:views
このコマンドでログインページやその他のページが作成できます。
2. ログインページに名前を入力するフォームを追加
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true, autocomplete: "name" %>
</div>
この際に、Eメールを入力するフォームは削除しておいてください!
3. コントローラにて「name」を保存できるように許可を与える
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
#deviseの機能が行われる前にconfigure_permitted_parametersメソッドを実行
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:email,:name])#nameを追加
end
end
初期状態の devise は、サインアップ、ログイン時に「email」と「パスワード」しか受け取ることを許可されてないため、現状では name を入力しても、データとして保存することはできません。
なので、指定したデータは保存できるよう、許可を与える必要があります!
4. 認証キーの設定
#config.authentication_keys = [:email]
最後に、devise.rbファイルの上記コードを探します!
config.authentication_keys = [:name]
上記のようにコメントアウトを外して、「:email」を「:name」に変更します!
環境や実装内容によって異なるかもしれませんが、49行目付近に記述があると思います!
以上で実装は完了です!
※もし、実装してもログインできない場合は「rails s」をし直してサーバーを再度起動してみてください。
最後に
今回はdeviseにおけるログイン方法の変更をしました。
私自身も悩んだ点だったのでアウトプットさせていただきました、、、!
今、学習している方の参考になれば幸いです。