validate([ 'email' => 'required|email', 'password' => 'required|string', ]); $admin = Admin::where('email', $validated['email'])->first(); if (!$admin || !Hash::check($validated['password'], $admin->password)) { return $this->error( ErrorCode::INVALID_CREDENTIALS, ErrorCode::getMessage(ErrorCode::INVALID_CREDENTIALS) ); } $token = $admin->createToken('admin-token')->plainTextToken; $this->logService->logOperation( 'admin', $admin->id, 'Admin logged in' ); return $this->success([ 'token' => $token, 'admin' => [ 'id' => $admin->id, 'name' => $admin->name, 'email' => $admin->email, ], ]); } catch (ValidationException $e) { return $this->error( ErrorCode::VALIDATION_ERROR, ErrorCode::getMessage(ErrorCode::VALIDATION_ERROR), $e->errors() ); } catch (\Exception $e) { Log::error('Error during admin login', [ 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); return $this->error( ErrorCode::SERVER_ERROR, ErrorCode::getMessage(ErrorCode::SERVER_ERROR) ); } } /** * 管理员登出 * * @param Request $request * @return JsonResponse */ public function logout(Request $request): JsonResponse { try { $admin = $request->user(); $admin->currentAccessToken()->delete(); $this->logService->logOperation( 'admin', $admin->id, 'Admin logged out' ); return $this->success(null, '已成功登出。'); } catch (\Exception $e) { Log::error('Error during admin logout', [ 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), 'admin_id' => $request->user()?->id, ]); return $this->error( ErrorCode::SERVER_ERROR, ErrorCode::getMessage(ErrorCode::SERVER_ERROR) ); } } /** * 修改管理员密码 * * @param Request $request * @return JsonResponse */ public function changePassword(Request $request): JsonResponse { try { $validated = $request->validate([ 'current_password' => 'required|string', 'new_password' => 'required|string|min:8|confirmed', ]); $admin = $request->user(); if (!Hash::check($validated['current_password'], $admin->password)) { return $this->error( ErrorCode::INVALID_CREDENTIALS, '当前密码错误。' ); } $admin->password = Hash::make($validated['new_password']); $admin->save(); $this->logService->logOperation( 'admin', $admin->id, 'Admin changed password' ); return $this->success(null, '密码修改成功。'); } catch (ValidationException $e) { return $this->error( ErrorCode::VALIDATION_ERROR, ErrorCode::getMessage(ErrorCode::VALIDATION_ERROR), $e->errors() ); } catch (\Exception $e) { Log::error('Error changing admin password', [ 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), 'admin_id' => $request->user()?->id, ]); return $this->error( ErrorCode::SERVER_ERROR, ErrorCode::getMessage(ErrorCode::SERVER_ERROR) ); } } }