Firestore报错求助:未登录时出现FIRFirestoreErrorDomain Code=13内部错误
解决Firestore Error Code=13 "内部错误"(仅未登录时触发)
首先,这个看似模糊的“内部错误”其实是Firestore在权限校验不通过时的一种“委婉”提示——本质是未登录用户没有权限访问你的places集合,只是错误信息没有直接点明而已。结合你说的“登录后正常”的现象,完全符合这个逻辑。
下面给你几个针对性的解决方案,按优先级排序:
1. 检查并调整Firestore安全规则
这是最直接的原因:你的Firestore安全规则大概率默认设置为仅允许已认证用户访问所有资源。可以按以下步骤修改:
- 打开Firebase控制台,进入你的项目 → Firestore数据库 → 规则标签页
- 查看当前规则,默认的规则通常是这样的:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } } - 如果需要让未登录用户也能读取
places集合,修改规则为:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 单独给places集合设置读取权限 match /places/{document} { allow read: if true; // 允许所有用户读取(包括未登录) allow write: if request.auth != null; // 写操作仍需登录验证 } // 其他集合保持原有认证要求 match /{document=**} { allow read, write: if request.auth != null; } } }注意:开放
if true的权限要谨慎,如果你只需要特定场景的未登录访问,可以进一步细化规则(比如限制读取数量、特定字段等),避免数据泄露风险。
2. 启用Firebase匿名认证(更安全的方案)
如果不想直接开放集合权限,你可以给未登录用户自动创建匿名身份,这样既满足Firestore的认证要求,又不需要用户输入账号密码:
在你的App初始化代码中(比如AppDelegate.swift的didFinishLaunchingWithOptions方法里,FirebaseApp.configure()之后)添加以下代码:
import FirebaseAuth // 自动登录匿名用户 Auth.auth().signInAnonymously { authResult, error in if let error = error { print("匿名登录失败: \(error.localizedDescription)") return } // 匿名登录成功,用户现在拥有合法的认证身份 let anonymousUser = authResult?.user print("匿名用户ID: \(anonymousUser?.uid ?? "未知")") }
这样未登录状态下的用户也会被Firestore视为已认证用户,就能正常访问受规则保护的资源了。
3. 快速验证配置完整性
虽然你已经做了基础配置,但可以快速排查以下几点:
- 确认
GoogleService-Info.plist已正确添加到项目中,并且在Xcode的“Target Membership”中勾选了你的主App目标 - 检查Firebase控制台中,你的项目是否已经启用了Firestore服务
- 确认Firebase相关依赖(FirebaseFirestore、FirebaseAuth等)已正确安装(不管是用CocoaPods还是Swift Package Manager)
内容的提问来源于stack exchange,提问作者Kim-Jimin
相关产品推荐
相关产品推荐

