用户无权访问 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)的主要内容,如果未能解决你的问题,请参考以下文章