🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

680閲覧

ログイン機能を作成したいがログインできない

tacty

総合スコア8

Ruby

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

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2019/09/06 01:41

前提・実現したいこと

ログイン機能を実装したいのですが、メールアドレスとパスワードを入力してもログインできず弾かれてしまいます。
アドバイスをいただきたいです。

発生している問題・エラーメッセージ

ログインができない

new.html.erb

<div class="container"> <h1>ログイン</h1> <%= @text %> <%= @user %> <%= form_with scope: :session, local: true do | f |%> <div class="form-group"> <%= f.label :email, 'メールアドレス' %> <%= f.text_field :email, class: 'form-control', id: 'session_email' %> </div> <div class="form-group"> <%= f.label :password, 'パスワード' %> <%= f.password_field :password, class: 'form-control', id: 'session_password' %> </div> <%= f.submit '登録する', class: 'btn btn-primary'%> <% end %> </div>

sessions_controller.rb

class SessionsController < ApplicationController skip_before_action :login_required def new end def create user = User.find_by(email: session_params[:email]) if user&.authenticate(session_params[:password]) session[:user_id] = user.id redirect_to posts_path, notice: 'ログインしました' else @text = 'ログインできません' render :new end end def destroy reset_session redirect_to root_url, notice: 'ログアウトしました。' end private def session_params params.require(:session).permit(:emali, :password) end end

###routes.rb

Rails.application.routes.draw do get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' root to: 'home#top' resources :users resources :posts end

試したこと

条件分岐で失敗した際に@textにメッセージを入れ表示されるか試したところ画面上に表示されたので、controllerのcreate処理までは通っていると思いますが真の条件を通らないためと思っています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

各種変数をデバッグしてみてください、原因がわかるはずです

class SessionsController < ApplicationController def create p params # paramsは想定通りか p session_params[:email] # email は取れているか p session_params[:password] # password は取れているか user = User.find_by(email: session_params[:email]) p user # user は見つけれられているか p user&.authenticate(session_params[:password]) # authenticateはtrueになるか # authenticate が false なら authenticate 関数の中身でも各種変数を p if user&.authenticate(session_params[:password]) session[:user_id] = user.id redirect_to posts_path, notice: 'ログインしました' else @text = 'ログインできません' render :new end end

追記

Unpermitted paramter email が出力されているとのことなので

def session_params params.require(:session).permit(:emali, :password) end

:emali ではなく :email ですかね

投稿2019/09/06 01:49

編集2019/09/06 02:33
unhappychoice

総合スコア1531

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

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

tacty

2019/09/06 02:05

回答ありがとうございます。 知識不足で申し訳ありませんがデバック方法はgemを入れて使用する形ですか? 回答でいただいたコードをそのまま利用すればいけますでしょうか?
unhappychoice

2019/09/06 02:11

https://ref.xaio.jp/ruby/classes/kernel/p p は Ruby で用意されているメソッドなので、どこでも使用できます。 p を使用すれば、ログインした際に `rails s` しているターミナルのログに p した内容が表示されるはずです。また、見やすく表示する pp などもあるので、適宜利用してくださいmm
tacty

2019/09/06 02:27

ありがとうございます。 実行してみたところ Processing by SessionsController#create as HTML Parameters: {"authenticity_token"=>"3/kc0wUlbAaXQdYnQhDqhzofEPpSr+kvMd2SFlm+/6bhPdBN2CWYU791mRLhtyEKhhT1vxooGuYgFkQqkrKrjg==", "session"=>{"email"=>"test1@gmail.com", "password"=>"[FILTERED]"}, "commit"=>"登録する"} <ActionController::Parameters {"authenticity_token"=>"3/kc0wUlbAaXQdYnQhDqhzofEPpSr+kvMd2SFlm+/6bhPdBN2CWYU791mRLhtyEKhhT1vxooGuYgFkQqkrKrjg==", "session"=>{"email"=>"test1@gmail.com", "password"=>"test"}, "commit"=>"登録する", "controller"=>"sessions", "action"=>"create"} permitted: false> Unpermitted parameter: :email nil Unpermitted parameter: :email "test" Unpermitted parameter: :email User Load (1.3ms) SELECT "users".* FROM "users" WHERE "users"."email" IS NULL LIMIT ? [["LIMIT", 1]] ↳ app/controllers/sessions_controller.rb:11:in `create' nil nil Rendering sessions/new.html.erb within layouts/application Rendered sessions/new.html.erb within layouts/application (Duration: 1.4ms | Allocations: 850) Completed 200 OK in 48ms (Views: 34.4ms | ActiveRecord: 1.6ms | Allocations: 14591) と出力されました。 emailがどうやら取れてないので処理が行われていない状態でした。 考えられる原因としてなにかアドバイスいただけたら幸いです。
tacty

2019/09/06 02:35

ありがとうがざいました。 入力ミスという単純なことでした… デバックの方法まで教えていただき勉強になりました。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問