我可以将Firebase存储用于只能通过我的React网络应用访问的图片吗?
问题描述:
我创建一个约会阵营的web应用程序,用户可以上传自己的照片给他们的用户配置文件。我想使用Firebase存储。我想,这样通过身份验证的用户从Web应用程序访问时,他们只可见保护的影像 - 现在我得到这样一个形象:我可以将Firebase存储用于只能通过我的React网络应用访问的图片吗?
let storageRef = firebase.storage().ref(`images/${userid}/${userImageName}`);
// Get the download URL
storageRef.getDownloadURL().then(function(url) {
// Insert url into an <img> tag to "download"
})
这是伟大的 - 但一旦我把网址中的src属性的图像标签的人谁的意见的源代码可以复制的URL,并通过电子邮件,短信等发送它,使它"public"
。我曾尝试使用putString()
功能也只对火力地堡存储到再次创造像一个正常的图片上传它的URL使用put()
功能时,在的base64上传图片字符串。
所以我的问题是 - 我可以使用Firebase存储来存储图像并将它们制作为"private"
,以便只有经过身份验证的网络应用程序用户才能查看它们?有没有办法让只有图像数据并用它来生成在frontend/client
的图像,使得没有实际的URL是永远放在JS代码?
答
到getDownloadURL()
呼叫被安全规则,这意味着,如果你写的像一个规则保护:
service firebase.storage {
match /b/{bucket}/o {
match /images/{userId}/{userImageName} {
// any authenticated user can read the bytes or get a download URL
allow read: if request.auth != null;
// only the given user can upload their photo
allow write: if request.auth.uid == userId;
}
}
}
他们不会允许未经用户下载的URL。
至于第二个问题:一旦有人可以看到一个文件,认为他们已经下载/ screenshotted并可以分享它,即使该网址无法公开访问(甚至在页面上)。查看内容等同于下载它,因此最终结果可能相同,因此它们之间没有什么区别。