【问题标题】:Firestore Rules: Error performing setData, PERMISSION_DENIEDFirestore 规则:执行 setData 时出错,PERMISSION_DENIED
【发布时间】:2020-08-14 03:39:48
【问题描述】:

我有以下几行将数据写入用户集合:

  final databaseReference = Firestore.instance;
  await databaseReference.collection("users")
      .document(userData['uid'])
      .setData(userData);

userData 是:{uid:b4WRYgXae8QIq9e3jTHscMPjvtk1,电话:+17031110000}。

我应用了以下规则,其中包含allow write: if (request.auth.uid == resource.data.uid)这一行

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{docId} {
      allow read: if (true);
      allow write: if (request.auth.uid == resource.data.uid)
      allow read, write: if (request.auth.uid == 'xxxxx')
    }
    match /orders/{docId} {
      allow read, write: if (request.auth.uid == resource.data.uid)
      allow read, write: if (request.auth.uid == 'xxxxx')
    }
  }
}

但颤振我给出以下错误:

  I/System.out(  931): (HTTPLog)-Static: isSBSettingEnabled false
    I/System.out(  931): (HTTPLog)-Static: isSBSettingEnabled false
    W/Firestore(  931): (21.4.2) [Firestore]: Write failed at users/b4WRYgXae8QIq9e3jTHscMPjvtk1: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
    E/flutter (  931): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(Error performing setData, PERMISSION_DENIED: Missing or insufficient 

【问题讨论】:

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


    【解决方案1】:

    在安全规则中,resource 指的是文档中的现有数据。如果不存在现有文档,则那里没有价值,并且对其内容的任何检查都将失败,规则将拒绝访问。

    传入的文档数据位于request.resource,因此您可能希望将规则更改为:

    allow write: if (request.auth.uid == request.resource.data.uid);
    

    这将要求客户端始终为用户集合中的文档提供与其自己的身份验证 uid 匹配的 uid 字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      相关资源
      最近更新 更多