'required | email']; $message = [ 'email.required' => 'メールアドレスを入力してください', 'email.email' => 'メールアドレスの形式が正しくありません' ]; $validator = Validator::make($request->all(), $rules, $message); if ($validator->fails()) { return redirect('/swo2_1') ->withErrors($validator) ->withInput(); } // 登録済メールアドレスチェック $email = $request->input('email'); $existingMember = User::where('user_primemail', $email)->get(); foreach ($existingMember as $member) { if ($member->user_quit_flag != 1) { return redirect('/swo2_1') ->withErrors(['email' => '指定のメールアドレスは既に使用されています。']) ->withInput(); } } // 会員登録用暗号化URL生成(有効期限30分) $url = URL::temporarySignedRoute('swo2_3', now()->addMinutes(30), ['email' => encrypt($email)]); // メール送信 Mail::send(["text" => 'emails.member_regist_info'], ['url' => $url], function ($message) use ($email) { $message->to($email)->subject('【So-Manager】新規ユーザー登録用URLのご案内'); }); // 完了画面遷移 return view('/swo2_2'); } // 入力画面表示 public function index() { // 署名付きURLの有効期限チェック if (!request()->hasValidSignature()) { return redirect('/error')->withErrors(['error' => '署名の有効期限が切れています']); } // 初回遷移(GETアクセス)時のリクエストパラメータチェック if (!session()->has('email')) { // パラメータ存在チェック $encryptedEmail = request()->query('email'); if (!$encryptedEmail) { return redirect('/error')->withErrors(['error' => 'メールアドレスが指定されていません']); } // パラメータ整合性チェック try { $email = decrypt($encryptedEmail); } catch (\Exception $e) { return redirect('/error')->withErrors(['error' => 'メールアドレスの情報が不正です']); } // 二重登録防止チェック $existingMember = User::where('user_primemail', $email)->get(); foreach ($existingMember as $member) { if ($member->user_quit_flag != 1) { return redirect('/error')->withErrors(['error' => '既に登録済みです']); } } // メールアドレスをセッションに保存 session(['email' => $email]); } // 入力画面に遷移 return view('/swo2_3'); } // 確認画面表示 public function confirm(Request $request) { // 登録完了後のブラウザバックによる二重登録対策 if (!session()->has('email')) { return redirect('/error')->withErrors(['error' => '不正なアクセスです']); } // 入力チェック内容 (メールアドレスはセッションから取得するため対象外) $rules = [ 'name' => 'required', 'kana' => 'required|regex:/^[ァ-ヶー]+$/u', 'phone.*' => 'required|regex:/^[0-9]+$/', 'mobile.*' => 'nullable|regex:/^[0-9]+$/', ]; // エラーメッセージ (メールアドレスはセッションから取得するため対象外) $message = [ 'name.required' => '名前を入力してください', 'kana.required' => 'フリガナを入力してください', 'kana.regex' => 'フリガナは全角カタカナで入力してください', 'phone.*' => '電話番号を正しく入力してください', 'mobile.*' => '予備電話番号を正しく入力してください', ]; // バリデーションチェック $validator = Validator::make($request->all(), $rules, $message); if ($validator->fails()) { return redirect('/swo2_3') ->withErrors($validator) ->withInput(); } // 画面返却値 $input_data = [ "name" => $request->input('name'), "kana" => $request->input('kana'), "phone" => $request->input('phone'), "mobile" => $request->input('mobile'), "email" => session('email'), ]; // 確認画面に遷移 return view('/swo2_4', ['input_data' => $input_data]); } // 会員登録 or 戻る public function complete(Request $request) { // 前の画面に戻る if($request->input('back') == 'back'){ return redirect('/swo2_3')->withInput(); } // 登録完了後のブラウザバックによる二重登録対策 if (!session()->has('email')) { return redirect('/error')->withErrors(['error' => '不正なアクセスです']); } // 利用者連番、利用者ID(利用者連番+7DSRチェックデジット)、初期パスワード(ハッシュ化)を生成 $commonFunction = new CommonFunction(); $nextSeq = \DB::table('user')->max('user_seq') + 1; $userId = $nextSeq . $commonFunction->calc7dsr($nextSeq); $userPass = $commonFunction->createPassword(); $userPassHash = $commonFunction->hashPassword($nextSeq, $userPass); // 会員情報登録 $user = new User(); $user->user_seq = $nextSeq; $user->user_id = $userId; $user->user_pass = $userPassHash; $user->tag_qr_flag = 1; $user->user_name = $request->input('name'); $user->user_phonetic = $request->input('kana'); $user->user_homephone = $request->input('phone'); $user->user_mobile = $request->input('mobile'); $user->user_primemail = session('email'); $user->user_quit_flag = 0; $user->created_at = now(); $user->updated_at = now(); $user->save(); // 登録完了メール送信 Mail::send(["text" => 'emails.member_regist_complete'], [ 'user_name' => $request->input('name'), 'user_pass' => $userPass, ], function ($message) use ($user) { $message->to($user->user_primemail)->subject('【So-Manager】ユーザー登録完了のご連絡'); }); // セッション削除 session()->forget('email'); // 完了画面に遷移 return view('/swo2_5'); } }