where('user_id', $user_id)->first(); if (!$user) { return redirect('/login'); } // 直前のPOST値をold()やsession()->get('_old_input')で取得 $input = session()->get('_old_input', []); \Log::info('ユーザー情報編集確認画面にアクセス', [ 'user_id' => $user_id, ]); return view('user.confirm', [ 'user' => $user, 'input' => $input, 'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用) ]); } // 入力内容確認画面から「変更を確定する」ボタン押下時 public function submit(Request $request) { $user_id = session('user_id'); if (!$user_id) { return redirect('/login'); } $user = DB::table('user')->where('user_id', $user_id)->first(); if (!$user) { return redirect('/login'); } $token = Str::random(64); $changeData = $request->except(['_token']); $changeData['user_id'] = $user_id; // 本人確認書類画像アップロード処理 if ($request->hasFile('photo_filename1') && $request->file('photo_filename1')->isValid()) { $file1 = $request->file('photo_filename1'); $filename1 = uniqid('photo1_') . '.' . $file1->getClientOriginalExtension(); $file1->storeAs('photo', $filename1, 'public'); $changeData['photo_filename1'] = $filename1; } if ($request->hasFile('photo_filename2') && $request->file('photo_filename2')->isValid()) { $file2 = $request->file('photo_filename2'); $filename2 = uniqid('photo2_') . '.' . $file2->getClientOriginalExtension(); $file2->storeAs('photo', $filename2, 'public'); $changeData['photo_filename2'] = $filename2; } Cache::put('change_request_' . $token, $changeData, now()->addDay()); $verifyUrl = route('user.edit.verify', ['token' => $token]); // Mailableでメール送信 Mail::to($changeData['user_primemail'])->send(new UserEditVerifyMail($verifyUrl, $user)); \Log::info('ユーザー情報変更メール送信完了画面にアクセス', [ 'user_id' => $user_id, ]); return view('user.mail_sent', [ 'active_menu' => 'SWC-1-1', // マイページメニューの選択状態用 'user_name' => $user ? $user->user_name : '', // ユーザー名(ヘッダー用) ]); } // 認証URLクリック時(変更確定処理) public function verify(Request $request) { $token = $request->query('token'); $changeData = Cache::get('change_request_' . $token); if (!$changeData) { return redirect()->route('user.edit')->withErrors(['register_expired' => '登録期間が過ぎています。もう一度登録してください。']); } // 変更内容をDBに保存(userテーブル更新) // 更新データ生成(photo_filename1, photo_filename2, user_passは入力時のみ追加) $updateData = [ 'user_gender' => $changeData['user_gender'] ?? null, 'user_regident_zip' => $changeData['user_regident_zip_1'] . $changeData['user_regident_zip_2'], 'user_regident_pre' => $changeData['user_regident_pre'], 'user_regident_city' => $changeData['user_regident_city'], 'user_regident_add' => $changeData['user_regident_add'], 'user_birthdate' => $changeData['user_birthdate'], 'user_age' => $changeData['user_age'], 'user_homephone' => implode('-', $changeData['user_homephone'] ?? []), 'user_mobile' => implode('-', $changeData['user_mobile'] ?? []), 'user_primemail' => $changeData['user_primemail'], 'user_submail' => $changeData['user_submail'], // 利用者区分(user_categoryid)をusertypeテーブルから取得して登録 // 画面からはuser_category(一般/学生)が渡ってくる 'user_categoryid' => self::getUserCategoryId($changeData['user_category'] ?? null), 'user_workplace' => $changeData['user_workplace'] ?? null, 'user_school' => $changeData['user_school'] ?? null, 'user_graduate' => $changeData['user_graduate'] ?? null, 'user_relate_zip' => $changeData['user_relate_zip_1'] . $changeData['user_relate_zip_2'], 'user_relate_pre' => $changeData['user_relate_pre'], 'user_relate_city' => $changeData['user_relate_city'], 'user_relate_add' => $changeData['user_relate_add'], 'updated_at' => now(), // ]; if (!empty($changeData['photo_filename1'])) { $updateData['photo_filename1'] = $changeData['photo_filename1']; } if (!empty($changeData['photo_filename2'])) { $updateData['photo_filename2'] = $changeData['photo_filename2']; } if (!empty($changeData['user_pass'])) { $updateData['user_pass'] = self::customPasswordHash($changeData['user_pass'], $changeData['user_id']); } DB::table('user') ->where('user_id', $changeData['user_id']) ->update($updateData); // キャッシュ削除 Cache::forget('change_request_' . $token); // 完了画面へ(ユーザー情報確認画面にリダイレクトし、成功メッセージ表示) return redirect()->route('user.info')->with('success', '更新に成功しました。'); } /** * 利用者区分の文言(一般/学生)からuser_categoryidを取得 */ private static function getUserCategoryId($categoryName) { if (!$categoryName) return null; $row = DB::table('usertype')->where('usertype_subject1', $categoryName)->first(); return $row ? $row->user_categoryid : null; } /** * パスワードをSHA256→SALT連結→25回ストレッチでハッシュ化 */ private static function customPasswordHash($password, $user_id) { $salt = $user_id . 'SOMSALT'; $hash = hash('sha256', $password); $hash .= $salt; for ($i = 0; $i < 25; $i++) { $hash = hash('sha256', $hash); } return $hash; } }