Laravel6で以下のようなユーザーのパスワード変更機能を作っています。
以下のように、ユーザー登録のときにHash::makeでパスワードをハッシュ化してデータベースに保存し、パスワード変更の際に現在のパスワードの確認のためにHash::checkを使って判定をしています。
↓RegisterController.php
php
1namespace App\Http\Controllers; 2 3use Illuminate\Http\Request; 4use App\User; 5use Illuminate\Support\Facades\Hash; 6 7class RegisterController extends Controller 8{ 9 // ユーザー登録の処理 10 public function register(Request $request) 11 { 12 $form = $request-> 13 validate(User::$registerRules, User::$registerValMessages); 14 15 User::create([ 16 'name' => $request->name, 17 'email' => $request->email, 18 'password' => Hash::make($request->password), 19 ]); 20 } 21} 22
↓UserController.php
php
1namespace App\Http\Controllers; 2 3use Illuminate\Http\Request; 4use Illuminate\Validation\ValidationException; 5use Illuminate\Support\Facades\Hash; 6use App\User; 7 8class UserController extends Controller 9{ 10 // ユーザーのパスワードの更新 11 public function password(Request $request) 12 { 13 $request->validate(User::$passwordRules, User::$passwordValMessages); 14 15 $user = User::find($request->id); 16 17 print_r($user->password); 18 print_r($request->currentPassword); 19 20 // ここでHash::checkを使って現在のパスワードを確認!! 21 if (Hash::check($request->currentPassword, $user->password)) { 22 $user->password = Hash::make($request->newPassword); 23 } 24 throw ValidationException::withMessages([ 25 'msg' => '現在のパスワードが間違っています!', 26 ]); 27 28 $user->save(); 29 } 30} 31
しかしなぜだかこのコードではHash::checkを通過できず、ValidationExceptionのエラーメッセージが投げられてしまいます。
上のようにHash::checkを行う直前にprint_rで、
DBのユーザーのパスワード:$user->password
入力した現在のパスワード:$request->currentPassword
をチェックしたのですが、前者はハッシュ化された現在のパスワード、後者はリクエストで送られてきた平文文字列のパスワードをきちんと取得できました。
何度も試したので、パスワードそのものが間違っているということはまずないと思います。
Hash::checkがうまくいっていない要因として何が考えられるでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/07 05:36