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

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

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

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

Ruby on Rails

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

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

ログイン

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

Q&A

解決済

4回答

7459閲覧

Rails ログインできない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

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

パスワード

パスワードは主に情報にアクセスする際に扱われます。主に、アクセス可能なユーザーを限定する手段として使われます。

ログイン

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

0グッド

1クリップ

投稿2020/10/09 09:52

編集2020/10/24 09:05

前提・実現したいこと

Railsでログインページを作り、ログインしようとしたのですが、登録できたメールアドレス、パスワードを入力しても「ログインに失敗しました」と表示され、ログインできません。
どうすればログインができるようになるのでしょうか?(ユーザー登録はできています)

BCyrptのgemを使って作成しています。

以下関係がありそうなコードです。

ご回答いただけると幸いです。よろしくお願いいたします。

該当のソースコード

users_controller.erb

Ruby

1class UsersController < ApplicationController 2 3 before_action :authorize, except: [:new, :create, :sign_in, :sign_in_process] 4 5 def sign_in 6 @user = User.new 7 render layout: "not_login" 8 end 9 10 def sign_in_process 11 user = User.find_by(email: params[:email]) 12 if user && user.authenticate(params[:password]) 13 user_sign_in(user) 14 flash[:success] = 'ログインしました' 15 redirect_to products_path 16 else 17 flash[:danger] = 'ログインに失敗しました' 18 redirect_to sign_in_path 19 end 20 end 21 22 private 23 def user_params 24 params.require(:user).permit(:name,:email,:password) 25 end 26end

users.rb

Ruby

1class User < ApplicationRecord 2 has_secure_password 3 4 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i 5 validates :email, presence: true, uniqueness: true, format:{ with: VALID_EMAIL_REGEX } 6 validates :password, presence: true, length:{minimum: 8} 7end

sign_in.html.erb

Ruby

1<h3>ログイン</h3> 2 <%= form_for @user, url: sign_in_path do |f| %> 3 <div class="field"> 4 <%= f.email_field :email, placeholder: "メールアドレス" %> 5 </div> 6 <div class="field"> 7 <%= f.password_field :password, placeholder: "パスワード" %> 8 </div> 9 <div class="actions"> 10 <%= f.submit "ログイン" %> 11 </div> 12 <% end %> 13 14 <div class="sign_in_link"> 15 <p>アカウントをお持ちですか? <%= link_to users_new_path do %>新規登録する<% end %></p> 16 </div>

users_helper.rb

Ruby

1module UsersHelper 2 3 def user_sign_in(user) 4 session[:user_id] = user.id 5 end 6 7 def current_user 8 if @current_user.nil? 9 @current_user = User.find_by(id: session[:user_id]) 10 else 11 @current_user 12 end 13 end 14 15 def user_signed_in? 16 current_user.present? 17 end 18 19 def authorize 20 redirect_to sign_in_path unless user_signed_in? 21 end 22 23end

routes.rb

Ruby

1Rails.application.routes.draw do 2 resources :users, only: [:edit, :update] 3 get '/sign_in', to:'users#sign_in', as: :sign_in 4 post '/sign_in', to: 'users#sign_in_process' 5end

試したこと

Userテーブルを作り直したり、サーバーを再起動させましたが特に変化はありませんでした。
DBはSQLiteを使っています。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/10/09 13:28

言葉足らずで申し訳ございません。登録されたメールアドレス、パスワードでログインしても「ログインに失敗しました」と表示され、ログインができない状態になります。
winterboum

2020/10/28 01:15

model Userのschemaを見せてください
退会済みユーザー

退会済みユーザー

2020/10/28 07:06

ActiveRecord::Schema.define(version: 2020_10_06_172459) do create_table "users", force: :cascade do |t| t.string "name" t.string "email" t.string "password_digest" t.datetime "created_at", null: false t.datetime "updated_at", null: false end end です。
guest

回答4

0

def sign_in_process
user = User.find_by(email: params[:user][:email])
if user && user.authenticate(params[:user][:password])
user_sign_in(user)
flash[:success] = 'ログインしました'
redirect_to products_path and return
else
flash[:danger] = 'ログインに失敗しました'
redirect_to sign_in_path
end
end

paramsの前に[:user]を置いたところでログインできました。

投稿2020/11/14 06:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

def sign_in_process
user = User.find_by(email: params[:user][:email])
if user && user.authenticate(params[:user][:password])
user_sign_in(user)
flash[:success] = 'ログインしました'
redirect_to products_path and return
else
flash[:danger] = 'ログインに失敗しました'
redirect_to sign_in_path
end
end

paramsの前に[:user]を置いたところでログインできました。

投稿2020/11/14 06:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

コントローラの11行目

User.find_by(email: params[:email])

ここ、 user_params[:email] じゃないですか?

投稿2020/10/23 09:00

perpouh

総合スコア299

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

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

退会済みユーザー

退会済みユーザー

2020/10/24 09:03

user_params[:email]にしてみたのですが、 SQLite3::SQLException: near "~~": syntax error: SELECT "users".* FROM "users" WHERE (登録したメールアドレス) LIMIT ? と表示されます… DBはSQLiteを使っています。
guest

0

たぶんparamsの使い方のあたりかなという気がします

とりあえず失敗したときのログを見てみましょう!(ターミナルに表示される文字)

もしくはpryを使ってデバッグするとわかりやすいかと

投稿2020/10/09 14:44

kokitail

総合スコア135

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

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

退会済みユーザー

退会済みユーザー

2020/10/10 08:36

回答ありがとうございます。 ログを見てみると、SQL文に SELECT "users".* FROM "users" WHERE "users"."email" IS NULL LIMIT ? と表示されました。デバッグした時に確認したのですが、メールアドレスもパスワードも入力できていました。何故ログではemailがNULLと表示されているのでしょうか?
kokitail

2020/10/10 08:39

デバッグはどのように行いましたか?
退会済みユーザー

退会済みユーザー

2020/10/11 16:39

pry-byebugをインストールして行いました。
kokitail

2020/10/12 02:39

デバッグで何を確認したのか書いてください
退会済みユーザー

退会済みユーザー

2020/10/24 08:56

返信が遅くなり、申し訳ございません。 pry-byebugを利用し、paramsを確認すると、 <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"長いので省略==", "user"=>{"email"=>"登録したメールアドレス", "password"=>"登録したパスワード"}, "commit"=>"ログイン", "controller"=>"users", "action"=>"sign_in_process"} permitted: false> と表示されます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問