Godot集成Firestore查询用户UID遇Nil返回错误求助
针对你在Godot中对接Firebase时,通过用户名查询UID返回Nil导致类型错误的问题,可按以下步骤排查:
检查Firestore安全规则
默认情况下Firestore会限制未认证用户的读写权限,若你的应用未完成用户认证,或者规则未允许对user_data集合的查询操作,会导致查询失败返回Nil。可临时将规则改为测试模式(仅限开发阶段):rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if true; } } }测试后记得改回严格规则。
确认Firebase初始化状态
确保在调用Firestore查询前,Firebase已完成初始化。可在启动脚本中添加初始化校验:func _ready(): var init_success = await Firebase.initialize() if not init_success: print("Firebase初始化失败") return初始化失败会导致所有Firestore操作无有效返回。
验证数据库字段匹配
Firestore字段名大小写敏感,检查user_data集合中的文档是否确实存在小写的username字段,且字段值与你传入的查询参数完全一致(包括空格、大小写)。移除冗余的orderBy语句
你的查询是精确匹配username,添加order_by属于冗余操作,且若未为username创建复合索引,可能触发Firestore的查询限制。先删除query.order_by("username", FirestoreQuery.DIRECTION.DESCENDING)这行代码,重新测试。在Firebase控制台直接测试查询
登录Firebase控制台,进入Firestore数据库的"数据"页面,使用筛选功能创建相同的查询(筛选username等于测试值),若控制台也无法查到结果,说明是数据存储问题;若控制台能查到结果,则问题出在Godot插件或代码逻辑。排查插件兼容性与版本
确认你使用的Firebase插件与当前Godot版本兼容(如Godot 4.x需对应支持4.x的插件),尝试更新插件到最新版本,或更换社区维护活跃的Firebase插件。查看插件内部错误信息
临时修改插件的query函数,在返回结果前打印任务的错误详情:func query(query : FirestoreQuery) -> Array: # 保留原有任务创建代码 var task = ... var result = await _handle_task_finished(task) if result == null: print("查询错误信息:", task.get_error_message()) # 视插件实际API调整 return result if result != null else []这样能直接获取查询失败的具体原因,比如网络问题、索引缺失等。
内容的提问来源于stack exchange,提问作者William Braun

