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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2583閲覧

deviseを用いたユーザー管理機能でログインができない

LL12

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/11/06 13:37

編集2020/11/07 01:10

###①前提・実現したいこと
フリマアプリを作成中。
deviseを用いたユーザー管理機能を実装中ですが、ログインがどうしてもできません。

ruby on railsに明るい方、ぜひお知恵を貸してください。

###②発生している問題・エラーメッセージ
新規登録画面から登録済みのemail、passwordでログインを試みるも、
「Invalid Email or password.」と、再ログインを求められてしまいます。
なお、Sequel Proで確認したところ、新規登録時のデータはきちんと保存されています。

コンソールでは以下の表示となります。(新規登録も記載)

Processing by Devise::RegistrationsController#create as HTML Parameters: {"authenticity_token"=>"LDp3GSdVbq9AxK/5LuzxqDlR+kAVqZhlIVnXD/tQvWN0t/fTzXji6AIyy3Zvo2Ylo5wCeeMP+MWyczGMbetxAA==", "user"=>{"nickname"=>"碇シンジ", "email"=>"shinji.ikari@nerv.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "last_name"=>"碇", "first_name"=>"シンジ", "last_name_kana"=>"イカリ", "first_name_kana"=>"シンジ", "birthday(1i)"=>"2001", "birthday(2i)"=>"6", "birthday(3i)"=>"6"}, "commit"=>"会員登録"} (0.3ms) BEGIN User Exists? (15.4ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'shinji.ikari@nerv.com' LIMIT 1 User Create (3.6ms) INSERT INTO `users` (`nickname`, `email`, `encrypted_password`, `last_name`, `first_name`, `last_name_kana`, `first_name_kana`, `birthday`, `created_at`, `updated_at`) VALUES ('碇シンジ', 'shinji.ikari@nerv.com', '$2a$12$mr501wIvQGFJjg87A9aLUuuF29/UCj..RQI/PAu5PHAH6lo43WqA6', '碇', 'シンジ', 'イカリ', 'シンジ', '2001-06-06', '2020-11-06 12:52:27.538321', '2020-11-06 12:52:27.538321') (2.1ms) COMMIT Redirected to http://localhost:3000/ Completed 302 Found in 419ms (ActiveRecord: 21.3ms | Allocations: 10601) Processing by Devise::SessionsController#new as HTML Parameters: {"authenticity_token"=>"bpqrvGmJmK/VIWkFrdsW3OF/1jofGzXrUQq1TARNRhDMa9/FYwDyEaM39TohI8vF6YtVj9fm7BZMSEd5OgKT0w==", "email"=>"ikari.shinji@nerv.com", "password"=>"[FILTERED]", "commit"=>"ログイン"} Rendering devise/sessions/new.html.erb within layouts/application Rendered shared/_second-header.html.erb (Duration: 1.8ms | Allocations: 692) Rendered shared/_second-footer.html.erb (Duration: 0.4ms | Allocations: 311) Rendered devise/sessions/new.html.erb within layouts/application (Duration: 5.1ms | Allocations: 2400) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 43ms (Views: 41.3ms | ActiveRecord: 0.0ms | Allocations: 20123)

ここで仮説なのですが
新規登録時には
"authenticity_token"...,"user"=>{"nickname"=>... となっているのに対し、
ログインでは
authenticity_token"...,"email"=>...と"user"のハッシュがない状態です。
原因はここでしょうか?

これを解決するには、どのファイルにどのように記述したら良いのでしょうか。

###③該当のソースコード

▼applicationコントローラー

ruby

1class ApplicationController < ActionController::Base 2 before_action :authenticate_user!, only: [:/] 3 before_action :configure_permitted_parameters, if: :devise_controller? 4 5 private 6 def configure_permitted_parameters 7 devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :last_name, :first_name, :last_name_kana, :first_name_kana, :birthday]) 8 devise_parameter_sanitizer.permit(:sign_in, keys: [:email, :password]) 9 end 10end

▼app/views/devise/sessions/new.html.erb

ruby

1<%= render "shared/second-header"%> 2 3<%= form_with class: 'registration-main', local: true do |f| %> 4<div class='form-wrap'> 5 <div class='form-header'> 6 <h1 class='form-header-text'> 7 会員情報入力 8 </h1> 9 </div> 10 <div class='login-flash-message'> 11 <%= flash[:notice] %> 12 <%= flash[:alert] %> 13 </div> 14 <div class="form-group"> 15 <div class='form-text-wrap'> 16 <label class="form-text">メールアドレス</label> 17 <span class="indispensable">必須</span> 18 </div> 19 <%= f.email_field :email, class:"input-default", id:"email", placeholder:"PC・携帯どちらでも可", autofocus: true %> 20 </div> 21 <div class="form-group"> 22 <div class='form-text-wrap'> 23 <label class="form-text">パスワード</label> 24 <span class="indispensable">必須</span> 25 </div> 26 <%= f.password_field :password, class:"input-default", id:"password", placeholder:"" %> 27 </div> 28 <div class='login-btn'> 29 <%= f.submit "ログイン" ,class:"login-red-btn" %> 30 </div> 31</div> 32<% end %> 33 34<%= render "shared/second-footer"%>

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

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

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

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

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

guest

回答1

0

自己解決

app/views/devise/sessions/new.html.erbのform_withに、モデルとURLを記載していないためでした。
この部分、正しくは以下です。
▼app/views/devise/sessions/new.html.erb

ruby

1<%= form_with model: @user, url: user_session_path, class: 'registration-main', local: true do |f| %>

なお、applicationコントローラーの以下の記述は不要でした。
▼applicationコントローラー

ruby

1class ApplicationController < ActionController::Base 2 #before_action :authenticate_user!, only: [:/] 不要 3 before_action :configure_permitted_parameters, if: :devise_controller? 4 5 private 6 def configure_permitted_parameters 7 devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :last_name, :first_name, :last_name_kana, :first_name_kana, :birthday]) 8 #devise_parameter_sanitizer.permit(:sign_in, keys: [:email, :password])不要 9 end 10end

投稿2020/11/07 02:07

LL12

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問