質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

1回答

85閲覧

deviseでログインできるようにしたい

nanananan

総合スコア7

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2024/02/29 04:16

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

質問した際に重複して投稿されていたようなので、こちらも解決済みに変更しておきます。

結果的にはルーティングミスで、devise_scope内での各種ルーティングに"users/"(”users/registrations#new”のように修正しました)を追加したところ、無事にログインできるようになりました。

投稿2024/03/04 01:08

nanananan

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問