我可以将Firebase存储用于只能通过我的React网络应用程序访问的图像吗?

时间:2017-11-11 04:04:41

标签: reactjs firebase firebase-storage

我正在创建约会React网络应用,用户可以将自己的照片上传到用户个人资料中。我想使用Firebase存储。我想保护图像,以便只有经过身份验证的用户从我的Web应用程序访问时才能查看它们 - 现在我得到这样的图像:

  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"
})

这很棒 - 但是一旦我将URL放在图片标记的src属性中,任何查看源代码的人都可以复制URL并通过电子邮件,短信等发送它,使其成为"public" 。我尝试使用putString()函数在 base64 字符串中上传图片,仅用于Firebase存储,再次使用put()函数创建一个URL,就像普通图片上传一样

所以我的问题是 - 我可以使用Firebase存储来存储图像并使它们"private",以便只有经过身份验证的网络应用用户才能查看它们吗?有没有办法只获取图像数据并使用它来生成frontend/client中的图像,以便在JS代码中没有放置实际的URL?

1 个答案:

答案 0 :(得分:2)

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不可公开访问(甚至在页面上)。查看某些东西相当于下载它,所以它的来源确实没有区别,因为最终结果可能是相同的。