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

时间:2018-06-01 16:44:08

标签: swift firebase firebase-storage

获取"用户无权访问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)


    }

升级后的代码,因为对于StorageMetaData现在不推荐使用downloadURL:

imageUploadTask.observe(.success) { snapshot in

       storageRef.downloadURL { (url, error) in

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

        }

在完成块中打印错误返回:    "用户无权访问gs://xxxx.appspot.com/(null)"

我尝试过:(1)检查用户是否经过身份验证(Auth.auth()。currentUser不是nil); (2)从snapshot.metadata.storageReference获取storageRef没有解决此问题。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,解决方案(在重新检查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)
        })
    }