将Cloud Firestore限制为特定域

时间:2018-11-22 07:11:03

标签: firebase google-cloud-firestore firebase-security-rules

是否有一种方法可以限制Cloud Firestore(用于托管/网络)仅对一个域(例如xyz.com)进行CRUD操作?

例如,下面的规则未经授权将read, update, delete锁定,但是您仍然可以将write内容锁定到数据库中。

service cloud.firestore {
  match /databases/{database}/documents {
    match /coming-soon-email-ids/{document=**} {
      allow write;
      allow read, update, delete: if request.auth.uid == !null;
    }
  }
}

还是我必须在其中集成Google的防火墙?

2 个答案:

答案 0 :(得分:2)

Firebase安全规则无法限制对Web域的访问。从广义上讲,这是不可能的,因为Firestore旨在使用Web,Android和iOS从世界各地的移动客户端进行访问。 Android和iOS客户端似乎永远不会来自某个域。他们只是通过提供的客户端库或有时通过Firestore REST API直接访问数据库。 Web客户端甚至可能欺骗其表观域(只有HTTP请求中不安全的“ Referrer”标头才真正提供该域)。

答案 1 :(得分:1)

我有同样的问题,我想出了一个解决方案。您可以匿名登录:

const signIn = async () => {
auth.signInAnonymously()
.then(() => {
  // Signed in..
})
.catch((error) => {
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

然后你可以把你的规则写成:

allow read, write: if request.auth != null;

然后在身份验证中,您可以激活匿名登录方法并添加您的授权域。