用户无权访问 gs://xxxx.appspot.com/(null)

Posted

技术标签:

【中文标题】用户无权访问 gs://xxxx.appspot.com/(null)【英文标题】:User does not have permission to access gs://xxxx.appspot.com/(null) 【发布时间】:2018-11-11 20:32:11 【问题描述】:

获取“用户无权访问gs://xxxx.appspot.com/(null)”

升级 Firebase(Firebase 5.1.0(原为 4.11.0)、FirebaseStorage 3.0.0(原为 2.1.3))然后编写代码:

这是升级前的工作代码:

imageUploadTask.observe(.success)  snapshot in

        let downloadURL = snapshot.metadata!.downloadURL()!.description
        addPostData(userId: userId, downloadURL: downloadURL)


    

自 downloadURL 升级后的代码现在已被 StorageMetaData 弃用:

imageUploadTask.observe(.success)  snapshot in

       storageRef.downloadURL  (url, error) in

        guard let downloadURL = url else  return 
        addPostData(userId: userId, downloadURL: downloadURL.description)

        

在完成块中打印错误返回: ""

我尝试过的:(1)检查用户是否已通过身份验证(Auth.auth().currentUser 不为零); (2) 从 snapshot.metadata.storageReference 获取 storageRef 没有解决这个问题。

我想继续只允许经过身份验证的用户上传图片,并且不希望更改 Firebase 存储规则。

有什么想法吗?

【问题讨论】:

你在哪里分配 storageRef 因为错误意味着你的 ref 是 gs://xxxx.appspot.com/(null) 这篇文章可能对您有所帮助。我想你也有同样的问题。 ***.com/questions/50563347/… @JenPerson 感谢指点我发现我的错误我正在这样做let storeageRef = Storage.storage().reference(),现在已将其更改为let storageRef = Storage.storage().reference().child(imagestorePath),现在它可以工作了 【参考方案1】:

我遇到了同样的问题,解决方案(在重新检查guide doc 中的代码示例后)是使用代表图像文件的 Child 对象调用downloadURL 方法。看下面的代码:

    // Upload the image
    let imagesFolder = Storage.storage().reference().child("images")      
    let imageFileName = NSUUID().uuidString + ".jpg"
    let imageFileObject = imagesFolder.child(imageFileName)

    imageUploadTask.observe(.success)  snapshot in
        imageFileObject.downloadURL(completion:  (url, error) in
            if error != nil 
                print(error!.localizedDescription)
                return
            

            guard let downloadURL = url else  return 
            print("Url: \(downloadURL)")

            addPostData(userId: userId, downloadURL: downloadURL.description)
        )
    

【讨论】:

以上是关于用户无权访问 gs://xxxx.appspot.com/(null)的主要内容,如果未能解决你的问题,请参考以下文章

用户无权访问此对象。带储藏火库

Firebase 错误:用户无权访问

gcloud:用户无权访问服务帐户“默认”

用户无权访问数据库

用户无权访问此对象。 Firebase 存储安卓

AWS 用户无权通过显式拒绝访问此资源