我们将构建Angular应用程序,将我们的Firebase数据库中的一些图像显示给用户。
从Firebase文档中我了解到这样做的方法是获取下载链接并将其用作src
html标记的img
:
const storageRef = firebase.storage().ref()
const uid = firebase.auth().currentUser.uid
const imageRef = storageRef.child(`images/${uid}/photo.png`)
const downloadLink = imageRef.getDownloadURL()
然后将downloadLink
的内容传递给src
代码的img
。
问题是.getDownloadURL()
似乎生成了不强制执行Firebase存储安全规则的公共下载链接。因此,不仅当前登录的用户(谁有权访问该图像)可以关注此链接,但任何有链接的人都可以。即使授权用户只是复制图像链接并将其发布在他们的Facebook上,他们的任何朋友都可以看到该图像。我们不希望用户能够共享图像链接 - 甚至可能存在法律问题。
这些是我们的存储安全规则:
service firebase.storage {
match /b/XXXXXXXXX.appspot.com/o {
match /images/{uid}/{allPaths=**} {
allow read, write: if request.auth.uid == uid;
}
}
}
在网络上显示图片时,有没有办法如何使用Firebase Storage强制执行基于用户的安全规则?