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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

661閲覧

authenticateについて

tetsuya7724

総合スコア67

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/21 03:30

前提・実現したいこと

ログインフォームからデータを入力をしてログインからuser.indexに行きたい。

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

BCrypt::Errors::InvalidHash in UsersController#login invalid hash Extracted source (around line #63): @user = User.find_by(email: params[:email]) if @user && @user.authenticate(params[:password]) session[:user_id] = @user.id flash[:notice] = "ログインしました" redirect_to("/posts/index")

該当のソースコード

ruby

1#conrtoller 2 3class UsersController < ApplicationController 4 before_action :authenticate_user, {only: [:index, :show, :edit, :update]} 5 before_action :ensure_correct_user, {only: [:edit, :update]} 6 7 8 def index 9 @users = User.all 10 end 11 12 def show 13 @user = User.find_by(id: params[:id]) 14 end 15 16 def new 17 @user = User.new 18 end 19 20 def create 21 @user = User.new( 22 name: params[:name], 23 email: params[:email], 24 password: params[:password] 25 ) 26 if @user.save 27 session[:user_id] = @user.id 28 flash[:notice] = "ユーザー登録が完了しました" 29 redirect_to("/users/#{@user.id}") 30 else 31 render("users/new") 32 end 33 end 34 35 def edit 36 @user = User.find_by(id: params[:id]) 37 end 38 39 def update 40 @user = User.find_by(id: params[:id]) 41 @user.name = params[:name] 42 @user.email = params[:email] 43 44 if params[:image] 45 @user.image_name = "#{@user.id}.jpg" 46 image = params[:image] 47 File.binwrite("public/user_images/#{@user.image_name}", image.read) 48 end 49 50 if @user.save 51 flash[:notice] = "ユーザー情報を編集しました" 52 redirect_to("/users/#{@user.id}") 53 else 54 render("users/edit") 55 end 56 end 57 58def login_form 59end 60 61 def login 62 63 @user = User.find_by(email: params[:email]) 64 65 if @user && @user.authenticate(params[:password]) 66 session[:user_id] = @user.id 67 flash[:notice] = "ログインしました" 68 redirect_to("/posts/index") 69 else 70 @error_message = "メールアドレスまたはパスワードが間違っています" 71 @email = params[:email] 72 @password = params[:password] 73 render("users/login_form") 74 end 75end 76 77 def logout 78 session[:user_id] = nil 79 flash[:notice] = "ログアウトしました" 80 redirect_to("/users/login") 81 end 82 83 def ensure_correct_user 84 if @current_user.id != params[:id].to_i 85 flash[:notice] = "権限がありません" 86 redirect_to("/posts/index") 87 end 88 end 89 90private 91 # Use callbacks to share common setup or constraints between actions. 92 def user_params 93 params.require(:user).permit(:name, :email, :password, :password_confirm) 94 end 95end 96

ruby

1#model 2 3class User < ApplicationRecord 4 validates :name, {presence: true} 5 validates :email, {presence: true, uniqueness: true} 6 validates :password, {presence: true} 7 has_secure_password 8end 9

試したこと

もともとhas_secure_passwordがなかったので書き足しましたが、同じエラーが発生しています。

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

macOS Catalina 10.15.4
rails 6.0.2.2
Ruby 2.6.3p62

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

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

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

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

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

guest

回答1

0

ベストアンサー

invalid hash の hash とは rubyのHashのことではないです。
BCryptで暗号化(のようなこと)を行った結果です。
userのpassword_encripted(かな?)に入れられている値がそういうものではない、というエラーです。
生のパスワードを入れたりしてませんか?

投稿2020/04/21 13:43

winterboum

総合スコア23284

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

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

tetsuya7724

2020/04/21 15:47

生のパスワードというのは、user = User.newで作成したパスワードのことですか? それでしたら入れています。 ちなみにデータベースのカラムはpasswordとpassword_digestです。
winterboum

2020/04/21 20:55

生のPASSWORDをDBにしまってはいけません。 password_digestには何がはいってます?
tetsuya7724

2020/04/22 02:03

passwordと同じ値が入っています。FILTEREDと表示されて確認はできませんが、作成した時同じ値を入れたことは覚えています。
winterboum

2020/04/22 04:16

has_secure_password しているので、passwordはremove_columnしないと動きが変わるかも その上で、 user.password = 生password して saveするとpassword_digestにhashが入ります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問