今回は、LaravelのHash::make()でパスワードの更新が行われずに1日かかってしまった時の話をします。
public function update(Request $request)
{
$now = Carbon::now(); //現在の日時を取得
$hased_password = Hash::make($request->updatePassword);
//パスワードをハッシュ値として生成
$items = DB::table('users')->where('email', $request->email)->first();
if (Hash::check($request->currentPassword, $items->password)) {
//受け取ったパスワードとデータベースにあるパスワード(Hash値)が等しいかの確認
$param = [
'password' => $hased_password,
'updated_at' => $now
];
DB::table('users')->where('email', $items->email)->update($param);
//usersテーブルにあるユーザーのパスワードを更新
return response()->json([
'message' => 'Password updated successfully',
'data' => $param
], 200);
} else {
return response()->json([
'message' => 'Password updated failure'
], 404);
}
}
public function update(Request $request)
{
$now = Carbon::now();
$items = DB::table('users')->where('email', $request->email)->first();
if (Hash::check($request->currentPassword, $items->password)) {
$param = [
'password' => Hash::make($request->updatePassword),
'updated_at' => $now
];
DB::table('users')->where('email', $items->email)->update($param);
return response()->json([
'message' => 'Password updated successfully',
'data' => $param
], 200);
} else {
return response()->json([
'message' => 'Password updated failure'
], 404);
}
}
皆さん、この2つのコードでなにが違うか分かりますか?
結論から言うと
$hased_passwordを定義しているかどうかの違いだけです!
ただ、これに気づいていなかった僕は同じ画面を1日ずっと見続けていました。
もう一度おさらいすると
$hased_password = Hash::make($request->updatePassword);
// ~
$param = [
'password' => $hased_password,
'updated_at' => $now
];
こちらのコードはちゃんと値が更新されます。
$param = [
'password' => Hash::make($request->password),
//実行結果:空の値("")のHash値が設定される
'updated_at' => $now
];
こっちではなぜか、$request->password
の値がちゃんと受け取れていないようです。
なぜかは分からない、、、、
分かる人がいたら、ぜひコメントで教えていただけると幸いです。