2017-11-11 213 views
2

我创建一个约会阵营的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代码?

回答

1

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并可以分享它,即使该网址无法公开访问(甚至在页面上)。查看内容等同于下载它,因此最终结果可能相同,因此它们之间没有什么区别。

相关问题