実現したいこと
deviseを利用したログイン機能を正常に動作するようにしたい
発生している問題・分からないこと
現在、deviseを使用してユーザー新規登録、ログイン機能を実装中です。
デフォルトではメールアドレスとパスワード使用でのログイン機能だったのですが、ユーザー名とパスワード使用でのログイン方法に変更したいと思い、下記サイト様を参考に変更しました。
参考サイト様
https://qiita.com/yuki82511988/items/73659af9d1049bd1b256
しかしログイン機能がうまく働かず、ログインに失敗してユーザー新規登録画面に遷移させられる際に、「メールアドレスが入力されていません」というバリデーションのエラーメッセージが表示されています。
ターミナル上ではログインに失敗した「422 Unprocessable Entity」の結果が表示されていました(今回は、そのターミナル上のログをエラーメッセージとしてコピペしています)。
試しにビューを変更してメールアドレスの入力フォームを用意してユーザー名、メールアドレス、パスワードの3つの情報でログインできるようにしてエラー内容が変わるかも確認しました。
エラーメッセージの内容が変更され、「メールアドレスは既に使用されています」というバリデーションメッセージに変更されるものの、やはりログインには失敗してユーザー登録画面へと遷移されてしまいました。
どの部分を変更すれば、ユーザー名とパスワードだけでログインできるように実装できるのでしょうか。
お手数おかけしますが、ご教授いただけましたら大変助かります。
よろしくお願いします。
エラーメッセージ
error
1Started POST "/users" for ::1 at 2024-02-29 13:07:57 +0900 2Processing by Users::RegistrationsController#create as TURBO_STREAM 3 Parameters: {"authenticity_token"=>"[FILTERED]", "user"=>{"name"=>"ユーザーB", "password"=>"[FILTERED]", "remember_me"=>"1"}, "commit"=>"登録する"} 4 Rendering layout layouts/application.html.slim 5 Rendering users/registrations/new.html.slim within layouts/application 6 Rendered users/shared/_error_messages.html.slim (Duration: 0.2ms | Allocations: 347) 7 Rendered users/shared/_links.html.slim (Duration: 0.3ms | Allocations: 259) 8 Rendered users/registrations/new.html.slim within layouts/application (Duration: 5.0ms | Allocations: 12206) 9 Rendered users/shared/_header.html.slim (Duration: 0.1ms | Allocations: 204) 10 Rendered layout layouts/application.html.slim (Duration: 7.6ms | Allocations: 17358) 11Completed 422 Unprocessable Entity in 280ms (Views: 8.2ms | ActiveRecord: 0.0ms | Allocations: 22430)
該当のソースコード
config/initializers/devise.rb
1Devise.setup do |config| 2 3 config.authentication_keys = [:name]
app/controllers/application_controller.rb
1class ApplicationController < ActionController::Base 2 before_action :configure_permitted_paramaters, if: :devise_controller? 3 4private 5 def configure_permitted_paramaters 6 if resource_class == User 7 devise_parameter_sanitizer.permit(:sign_up, keys:[:remember_me]) 8 end 9 end 10end
app/views/users/sessions/new.html.slim
1h2 = t".title" 2 3= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| 4 5 h5 = render "users/shared/error_messages", resource: resource 6 7 .field 8 = f.label :name 9 = f.text_field :name, autofocus: true, autocomplete: "name", placeholder: true 10 br 11 .field 12 = f.label :password 13 = f.password_field :password, autofocus: true, autocomplete: "current-password", placeholder: true 14 - if devise_mapping.rememberable? 15 .field 16 = f.check_box :remember_me 17 = f.label :remember_me 18 br 19 .actions 20 = f.submit 21= render "users/shared/links"
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
インターネットで解決策になるものを調べてそれを元に、devise.rbやapplication_controller.rbのコードを変更しました。
しかし、①ターミナル上で:remember_meがストロングパラメータとして許可されていないというエラー表示、②ユーザー新規登録画面(registrations#new)での「メールアドレスが入力されていません」というバリデーションメッセージの表示が出るというエラーは解消できませんでした。
またメールアドレスに関するバリデーションに引っかかったため、ログイン時の仕様を変更してメールアドレスも含めての入力フォームに変更後ログインできるかも試しました。
しかし結果的にはログインできずにユーザー新規登録画面に遷移させられ、「メールアドレスは既に使用されています」というエラーメッセージに変更されるだけで、:remember_meがストロングパラメータとして許可されていないという根本のエラーは解決できませんでした。
補足
・Rails 7.0.8.1
・devise
・slim
・macOS Monterey バージョン12.6.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。