diff --git a/lib/app/common/app_run_data.dart b/lib/app/common/app_run_data.dart index 53a30b2..c2d1440 100755 --- a/lib/app/common/app_run_data.dart +++ b/lib/app/common/app_run_data.dart @@ -19,6 +19,7 @@ import '../services/api_service/kr_api.user.dart'; import '../services/kr_announcement_service.dart'; import '../services/singbox_imp/kr_sing_box_imp.dart'; import '../services/kr_site_config_service.dart'; +import '../services/kr_subscribe_service.dart'; import '../utils/kr_event_bus.dart'; import '../../singbox/model/singbox_status.dart'; @@ -204,7 +205,7 @@ class KRAppRunData { 'loginType': loginType.value, 'areaCode': areaCode ?? "", }; - // _kr_connectSocket(kr_userId.value.toString()); + KRLogUtil.kr_i('准备保存用户信息到存储', tag: 'AppRunData'); await KRSecureStorage().kr_saveData( @@ -279,6 +280,20 @@ class KRAppRunData { // 重置公告显示状态 KRAnnouncementService().kr_reset(); + + // 🔧 修复4: 清理订阅服务数据 - 防止未登录用户访问订阅 + try { + final subscribeService = Get.find(tag: 'KRSubscribeService'); + if (subscribeService != null && subscribeService is KRSubscribeService) { + KRLogUtil.kr_i('🧹 清理订阅服务数据...', tag: 'AppRunData'); + await subscribeService.kr_logout(); + KRLogUtil.kr_i('✅ 订阅服务数据已清理', tag: 'AppRunData'); + } + } catch (e) { + // 忽略异常:如果订阅服务未初始化或不可用,直接继续 + KRLogUtil.kr_d('⚠️ 无法获取订阅服务,跳过清理: $e', tag: 'AppRunData'); + } + // 5️⃣ 执行设备登录 final success = await kr_checkAndPerformDeviceLogin(); diff --git a/lib/app/modules/kr_home/controllers/kr_home_controller.dart b/lib/app/modules/kr_home/controllers/kr_home_controller.dart index d814aa6..ee9e9c9 100755 --- a/lib/app/modules/kr_home/controllers/kr_home_controller.dart +++ b/lib/app/modules/kr_home/controllers/kr_home_controller.dart @@ -566,8 +566,7 @@ class KRHomeController extends GetxController with WidgetsBindingObserver { // 添加活动组监听,确保状态同步 ever(KRSingBoxImp.instance.kr_activeGroups, (value) { - KRLogUtil.kr_i( - '📡 活动组更新,数量: ${value.length}', tag: 'HomeController'); + KRLogUtil.kr_i('📡 活动组更新,数量: ${value.length}', tag: 'HomeController'); if (value.isEmpty) { KRLogUtil.kr_w('⚠️ 活动组为空', tag: 'HomeController'); diff --git a/lib/app/services/kr_subscribe_service.dart b/lib/app/services/kr_subscribe_service.dart index 47867fd..a01faf0 100755 --- a/lib/app/services/kr_subscribe_service.dart +++ b/lib/app/services/kr_subscribe_service.dart @@ -10,6 +10,7 @@ import 'package:kaer_with_panels/app/utils/kr_log_util.dart'; import 'package:kaer_with_panels/app/utils/kr_common_util.dart'; import 'package:kaer_with_panels/app/localization/app_translations.dart'; +import 'package:kaer_with_panels/app/common/app_run_data.dart'; import '../../singbox/model/singbox_status.dart'; import '../model/business/kr_group_outbound_list.dart'; @@ -455,6 +456,15 @@ class KRSubscribeService { /// 刷新所有数据 Future kr_refreshAll() async { try { + // 🔧 修复2: 添加登录状态检查 - 只有已登录用户才能刷新订阅数据 + if (!KRAppRunData().kr_isLogin.value) { + KRLogUtil.kr_e('❌ 未登录用户,无法刷新订阅数据', tag: 'SubscribeService'); + kr_availableSubscribes.clear(); + kr_currentSubscribe.value = null; + kr_currentStatus.value = KRSubscribeServiceStatus.kr_error; + return; + } + kr_currentStatus.value = KRSubscribeServiceStatus.kr_loading; await kr_clearData(); KRLogUtil.kr_i('开始刷新所有数据', tag: 'SubscribeService'); diff --git a/lib/app/services/singbox_imp/kr_sing_box_imp.dart b/lib/app/services/singbox_imp/kr_sing_box_imp.dart index ee429d6..688d67d 100755 --- a/lib/app/services/singbox_imp/kr_sing_box_imp.dart +++ b/lib/app/services/singbox_imp/kr_sing_box_imp.dart @@ -21,6 +21,7 @@ import '../../../singbox/model/singbox_status.dart'; import '../../utils/kr_country_util.dart'; import '../../utils/kr_log_util.dart'; import '../../utils/kr_secure_storage.dart'; +import '../../common/app_run_data.dart'; enum KRConnectionType { global, @@ -1001,6 +1002,12 @@ class KRSingBoxImp { Future kr_start() async { // 不再手动设置状态,libcore 会通过 status stream 自动发送状态更新 try { + // 🔧 修复3: 添加登录状态检查 - 只有已登录用户才能连接VPN + if (!KRAppRunData().kr_isLogin.value) { + KRLogUtil.kr_e('❌ 未登录用户,禁止启动VPN连接', tag: 'SingBox'); + throw Exception('用户未登录,无法启动VPN服务'); + } + // ⚠️ 强制编译标记 - v2.0-lazy-load KRLogUtil.kr_i('🚀🚀🚀 [v2.0-lazy-load] 开始启动 SingBox...', tag: 'SingBox'); KRLogUtil.kr_i('📁 配置文件路径: $_cutPath', tag: 'SingBox');