用户无权访问 gs:// xxx.appspot.com

user does not have permission to access gs:// xxx.appspot.com

在此应用程序中,我使用 firebase 创建了身份验证和数据库。但是在我的 post 中,它由标题、内容和图像组成,我只看到我的默认图像。我在数据库中存储时遇到了一些问题,首先将图像上传到 firebase 存储然后获取它的 url.

import Foundation
import SwiftUI
import Firebase
import FirebaseStorage

class StorageStore: ObservableObject {
let storageRef = Storage.storage().reference()

    func uploadImage(_ image: UIImage, completion: @escaping (URL?) -> Void) {
        let imageRef = storageRef.child("images/"+timeString()+".jpg")
        
        guard let imageData = image.jpegData(compressionQuality: 0.1) else {
            return completion(nil)
        }
        let metadata = StorageMetadata()
        metadata.contentType = "image/jpg"
        
        imageRef.putData(imageData, metadata: metadata, completion: { [self] (metadata, error) in
            if let error = error {
                assertionFailure(error.localizedDescription) //   
 //Thread 1: Fatal error: User does not have permission to access gs://ios-post-193ec.appspot.com/images/2022-03-29T10:03:18Z.jpg.
                return completion(nil)
            }
            imageRef.downloadURL(completion: { (url, error) in
                if let error = error {
                    assertionFailure(error.localizedDescription)
                    return completion(nil)
                }
                completion(url)
            })
        })
    }
    
    func timeString() -> String {
        let now = Date()
        let formatter = ISO8601DateFormatter()
        let datetime = formatter.string(from: now)
        print(datetime)
        return datetime
    }

}

因此,我无法将图片上传到存储空间


在这种情况下,我有一个错误(),如上所示。而不是默认图像,模拟器中的 6 个永久图像之一必须出来。

错误信息显示用户没有访问该文件的权限。所以看起来你有 security rules 控制谁可以通过 Firebase 访问你的云存储中的文件,并且这些规则拒绝这个读取操作。我建议查看我链接的文档(那里还有一个旧的但仍然很棒的视频)以了解如何允许操作,同时仍然保持文件安全。