where('email', $request->string('email')->toString()) ->first(); if ($supervisor === null || ! Hash::check($request->string('password')->toString(), $supervisor->password)) { return $this->error('Identifiants invalides.', 401); } if (! $supervisor->is_active) { return $this->error('Compte superviseur désactivé.', 403); } $supervisor->update(['last_login_at' => now()]); $deviceName = $request->input('device_name', 'backoffice'); $accessMinutes = (int) config('laverie.auth.access_token_ttl_minutes', 60); $refreshDays = (int) config('laverie.auth.refresh_token_ttl_days', 30); $accessToken = $supervisor->createToken( "{$deviceName}-access", ['supervisor', 'access'], now()->addMinutes($accessMinutes), ); $refreshToken = $supervisor->createToken( "{$deviceName}-refresh", ['supervisor', 'refresh'], now()->addDays($refreshDays), ); Auth::guard('supervisor')->login($supervisor); return $this->success([ 'supervisor' => new SupervisorResource($supervisor), 'access_token' => $accessToken->plainTextToken, 'refresh_token' => $refreshToken->plainTextToken, 'token_type' => 'Bearer', 'expires_in' => $accessMinutes * 60, ], 'Connexion superviseur réussie.'); } public function logout(Request $request): JsonResponse { $user = $request->user(); if ($user instanceof Supervisor) { $user->currentAccessToken()?->delete(); } Auth::guard('supervisor')->logout(); return $this->success(message: 'Déconnexion superviseur réussie.'); } }