From 96c72b9bda220a2642213917a02ecc7e2ce99920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=A0=E7=9A=84=E5=90=8D=E5=AD=97?= <你的邮箱> Date: Tue, 6 Jan 2026 18:37:45 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3ID=E3=81=AF?= =?UTF-8?q?=E3=80=8Cope=5Fid=E3=80=8D=E2=87=92=E3=80=8Clogin=5Fid=E3=80=8D?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Auth/LoginController.php | 51 ++++++++++++++----- .../Auth/ResetPasswordController.php | 1 + 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 0727ba7..9f8bce6 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -70,7 +70,9 @@ class LoginController extends Controller /** * ログインリクエストのバリデーション - * Laravel 12変更点:ope_id, ope_passフィールドを使用(Laravel 5.7と同じ) + * + * 仕様上の入力名(フォーム側)は ope_id / ope_pass のまま維持し、 + * 内部の認証キーは login_id に寄せる(login_id 統一)。 * * @param \Illuminate\Http\Request $request * @return void @@ -79,10 +81,10 @@ class LoginController extends Controller { // 個別未入力メッセージ(仕様1,2) $request->validate([ - 'ope_id' => 'required|string', + 'ope_id' => 'required|string', // フォームの入力名は現状維持(実体は login_id) 'ope_pass' => 'required|string', ], [ - 'ope_id.required' => 'ログインIDが未入力です。', + 'ope_id.required' => 'ログインIDが未入力です。', 'ope_pass.required' => 'パスワードが未入力です。', ]); } @@ -90,36 +92,46 @@ class LoginController extends Controller /** * ログイン認証を試行 * + * + * - 画面入力(ope_id)= DBの login_id として扱う + * - 退職フラグチェックも login_id で取得して判定する + * * @param \Illuminate\Http\Request $request * @return bool */ protected function attemptLogin(Request $request) { // 先にIDのみでオペレータ取得して退職フラグを確認(仕様5-1) - $opeId = $request->input('ope_id'); - $operator = \App\Models\Ope::where('ope_id', $opeId)->first(); + $loginId = $request->input('ope_id'); // 入力名は ope_id だが中身は login_id + $operator = \App\Models\Ope::where('login_id', $loginId)->first(); + if ($operator && (int)($operator->ope_quit_flag) === 1) { // 退職扱いは認証失敗と同じメッセージ(仕様5-1 と 3/4 統一表示) return false; } + + // 認証実行(credentials() で login_id / password を渡す) return Auth::attempt($this->credentials($request), false); } /** * 認証用の資格情報を取得 - * Laravel 12変更点:ope_idとope_passをpasswordフィールドにマッピング + * + * + * - 認証IDを login_id に統一 + * - パスワード入力(ope_pass)は Auth 側の password にマッピング * * @param \Illuminate\Http\Request $request * @return array */ protected function credentials(Request $request) { - // Laravel 5.7: ope_id, ope_passをそのまま使用 - // Laravel 12: ope_passをpasswordにマッピングして認証 - return $request->only('ope_id') + ['password' => $request->input('ope_pass')]; + return [ + 'login_id' => $request->input('ope_id'), // フォーム入力(ope_id)→ DB列 login_id + 'password' => $request->input('ope_pass'), // フォーム入力(ope_pass)→ 認証用 password + ]; } - /** * ログイン成功時のレスポンス * @@ -130,8 +142,11 @@ class LoginController extends Controller { $request->session()->regenerate(); $this->clearLoginAttempts($request); + // 仕様5: ログインIDをセッション保持 + // ここで保持する値も login_id(入力名は ope_id のまま) $request->session()->put('login_ope_id', $request->input('ope_id')); + return redirect()->intended($this->redirectTo); } @@ -143,6 +158,7 @@ class LoginController extends Controller */ protected function sendFailedLoginResponse(Request $request) { + // 画面側のエラー表示キーは仕様に合わせて ope_id のまま throw ValidationException::withMessages([ 'ope_id' => [trans('auth.failed')], ]); @@ -176,7 +192,8 @@ class LoginController extends Controller protected function hasTooManyLoginAttempts(Request $request) { return RateLimiter::tooManyAttempts( - $this->throttleKey($request), 5 + $this->throttleKey($request), + 5 ); } @@ -189,7 +206,8 @@ class LoginController extends Controller protected function incrementLoginAttempts(Request $request) { RateLimiter::hit( - $this->throttleKey($request), 60 + $this->throttleKey($request), + 60 ); } @@ -218,12 +236,16 @@ class LoginController extends Controller /** * レート制限用のスロットルキーを取得 * + * + * - 画面入力名は ope_id のまま + * - ただし内容は login_id を想定(ログインID文字列) + * * @param \Illuminate\Http\Request $request * @return string */ protected function throttleKey(Request $request) { - return Str::lower($request->input('ope_id')).'|'.$request->ip(); + return Str::lower($request->input('ope_id')) . '|' . $request->ip(); } /** @@ -238,8 +260,9 @@ class LoginController extends Controller $this->throttleKey($request) ); + // 画面側のエラー表示キーは仕様に合わせて ope_id のまま throw ValidationException::withMessages([ 'ope_id' => [trans('auth.throttle', ['seconds' => $seconds])], ]); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php index 6e1a896..815e80f 100644 --- a/app/Http/Controllers/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -41,6 +41,7 @@ class ResetPasswordController extends Controller return back()->withErrors(['email' => 'ユーザーが見つかりません。']); } $user->password = Hash::make($request->password); + $user->updated_at = now(); $user->save(); // トークン削除