SwiftUIKit上传Firestore遇权限拒绝问题求助
问题分析与解决方案
你遇到的权限错误来自Firestore数据库,但你提供的Firebase规则是针对Cloud Storage的,这是核心问题——你没有配置Firestore的安全规则,同时代码中缺少用户登录状态的校验。
1. 配置Firestore安全规则
登录Firebase控制台,找到Firestore数据库的「规则」标签,替换成以下规则(允许已登录用户读写Post集合):
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /Post/{document=**} { allow read, write: if request.auth != null; } } }
修改后点击「发布」使规则生效。
2. 代码中添加登录状态校验
你的代码中使用了Auth.auth().currentUser?.email,但如果用户未登录,currentUser为nil,此时写入Firestore会触发权限拒绝。在上传方法开头添加登录校验:
@IBAction func yukleTiklandi(_ sender: Any) { // 先检查用户是否已登录 guard let currentUser = Auth.auth().currentUser else { hataMesajiGoster(title: "Hata", message: "Lütfen önce giriş yapın.") return } // 原有的上传逻辑... let storage = Storage.storage() let storageReference = storage.reference() let mediaFolder = storageReference.child("media") if let data = imageView.image?.jpegData(compressionQuality: 0.5){ let uuid = UUID().uuidString let imageReference = mediaFolder.child("\(uuid).jpg") imageReference.putData(data) { storagemetadata, error in if error != nil { self.hataMesajiGoster(title: "Hata", message: error?.localizedDescription ?? "Hata Aldınız, tekrar deneyin.") } else { imageReference.downloadURL { [self] url, error in if error == nil { let imageUrl = url?.absoluteString if let imageUrl = imageUrl { let firestoreDatabase = Firestore.firestore() // 使用已校验的currentUser的email let firestorePost = ["gorselurl": imageUrl, "yorum" : yorumTextField.text!, "email" : currentUser.email!, "tarih" : FieldValue.serverTimestamp()] firestoreDatabase.collection("Post").addDocument(data: firestorePost) { (error) in if error != nil { self.hataMesajiGoster(title: "Hata", message: error?.localizedDescription ?? "Hata Aldınız, Tekrar Deneyiniz!") } else { // 上传成功后可添加提示或页面跳转 hataMesajiGoster(title: "Başarılı", message: "Gönderiniz başarıyla yüklendi!") } } } } } } } } }
3. 额外检查项
- 确保你的项目已正确初始化Firebase:在
AppDelegate的didFinishLaunchingWithOptions方法中调用FirebaseApp.configure() - 确认用户登录流程正常,比如你有登录页面让用户通过邮箱/密码或其他方式认证
- 检查Firestore控制台中
Post集合是否存在(不存在会自动创建,但确保拼写一致)
内容的提问来源于stack exchange,提问作者이지혜
相关产品推荐
相关产品推荐

