validate([ 'username' => 'required|string', 'password' => 'required|string', ]); if (!Auth::guard('admin')->attempt($validated)) { return response()->json([ 'error' => 'invalid_credentials', 'message' => '用户名或密码错误。', ], 401); } /** @var Admin $admin */ $admin = Auth::guard('admin')->user(); $this->logService->logOperation( 'admin', $admin->id, 'Admin logged in' ); return response()->json([ 'id' => $admin->id, 'username' => $admin->username, 'email' => $admin->email, 'role' => $admin->role, ]); } catch (ValidationException $e) { return response()->json([ 'error' => 'validation_error', 'message' => '请求参数验证失败。', 'errors' => $e->errors(), ], 422); } catch (\Exception $e) { Log::error('Error during admin login', [ 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); return response()->json([ 'error' => 'server_error', 'message' => '服务器内部错误。', ], 500); } } public function logout(Request $request): JsonResponse { /** @var Admin $admin */ $admin = Auth::guard('admin')->user(); Auth::guard('admin')->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); $this->logService->logOperation( 'admin', $admin->id, 'Admin logged out' ); return response()->json([ 'message' => '已成功退出登录。', ]); } public function changePassword(Request $request): JsonResponse { try { $validated = $request->validate([ 'current_password' => 'required|string', 'new_password' => 'required|string|min:8|confirmed', ]); /** @var Admin $admin */ $admin = Auth::guard('admin')->user(); if (!Hash::check($validated['current_password'], $admin->password)) { return response()->json([ 'error' => 'invalid_password', 'message' => '当前密码错误。', ], 422); } $admin->update([ 'password' => Hash::make($validated['new_password']), ]); $this->logService->logOperation( 'admin', $admin->id, 'Changed password' ); return response()->json([ 'message' => '密码已成功修改。', ]); } catch (ValidationException $e) { return response()->json([ 'error' => 'validation_error', 'message' => '请求参数验证失败。', 'errors' => $e->errors(), ], 422); } catch (\Exception $e) { Log::error('Error changing admin password', [ 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); return response()->json([ 'error' => 'server_error', 'message' => '服务器内部错误。', ], 500); } } }