You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Cloud Firestore写入员工数据时遇getToken异常求助

解决Firestore写入时"getToken aborted due to token change"错误

我之前遇到过完全一样的问题,结合你的配置和代码,给你几个可行的解决方案:

1. 升级Firebase相关依赖版本

你的依赖版本都比较老旧,版本不兼容是触发这个错误的常见原因:

  • 更新pubspec.yaml中的Flutter包:
    将cloud_firestore和firebase_auth升级到兼容的稳定版本,比如:

    cloud_firestore: ^3.4.0
    firebase_auth: ^3.6.0
    

    (可以根据你的Flutter SDK版本调整,确保版本匹配,执行flutter pub upgrade完成更新)

  • 更新Android端gradle配置:
    android/build.gradle中的gradle插件和google-services版本太旧,建议升级:

    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.4'
        classpath 'com.google.gms:google-services:4.3.15'
    }
    

    同时记得修改android/gradle/wrapper/gradle-wrapper.properties中的distributionUrl,匹配gradle插件版本,比如:

    distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
    

2. 确保Auth状态稳定后再写入

这个错误很多时候是因为Firestore需要用户认证(如果你的数据库规则限制了登录才能写入),但写入时用户的认证token发生了变化(比如登录状态还没稳定就执行写入)。建议在确认用户已登录后再调用写入方法:

// 监听Auth状态,确保用户登录稳定
FirebaseAuth.instance.authStateChanges().listen((User? user) async {
  if (user != null) {
    // 用户已登录且状态稳定,执行写入
    await addEmployee(yourEmployeeData);
  } else {
    print('请先完成登录后再尝试写入数据');
  }
});

3. 简化写入操作(如果不需要事务)

你的代码用了Transaction但只是简单的写入操作,其实可以直接用set方法,避免事务可能带来的token冲突问题:

static Future<void> addEmployee(Map<String, dynamic> snapshot) async {
  try {
    await FirebaseFirestore.instance.collection('employee').doc().set(snapshot);
    print('员工信息写入成功');
  } catch (e) {
    print('写入失败: $e');
  }
}

(加上异常捕获可以更方便排查问题)

4. 检查Firestore数据库规则

如果你的数据库规则设置了需要认证才能写入,而用户未登录,也会触发相关的token错误。可以先临时修改规则测试:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true; // 临时开放权限测试
    }
  }
}

如果测试后不再报错,说明是权限规则的问题,记得测试完改回安全的规则(比如allow write: if request.auth != null;)

内容的提问来源于stack exchange,提问作者netlemon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:43:00