模拟器工作时客户端权限不足

时间:2018-06-25 17:43:03

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

我有以下firestore规则设置,我想让任何人在建议集合中创建文档,但是只有特定用户可以更新它。规则如下:

  service cloud.firestore {
    match /databases/{database}/documents {
      match /suggestions/{sugg} {
        allow create, read;
        allow update: if request.auth.uid == 'abc123';
      }
    }
  }

当我在提供的模拟器中对此进行测试时,它可以正常工作;但是,等待30分钟后,我在已部署的应用程序中进行测试,但出现错误:

  

错误:权限缺失或不足。

在我的应用中,我正在对建议集合进行add()调用。因此,在我指定allow create的规则中,这已足够。我添加了read,以防返回的文档被视为已读文档。

客户端:(AngularFire)

this.afs.collection('suggestions').add(sugg).then(() => {
  this.submitted = true;
}, err => console.error('Firebase error:', err));

1 个答案:

答案 0 :(得分:0)

问题是当request.auth为null时,Firestore无法尝试匹配uid。解决方案是添加一些功能:

 service cloud.firestore {
    match /databases/{database}/documents {
      function isSignedIn() {
        return request.auth != null;
      }
      function isAdmin() {
        return isSignedIn() && request.auth.uid == 'abc123';
      }

      match /suggestions/{sugg} {
        allow create, read;
        allow update: if request.auth.uid == 'abc123';
      }
    }
  }