FirebaseError:[code=permission-denied]:权限缺失或不足

Posted

技术标签:

【中文标题】FirebaseError:[code=permission-denied]:权限缺失或不足【英文标题】:FirebaseError: [code=permission-denied]: Missing or insufficient permissions 【发布时间】:2019-10-23 22:20:07 【问题描述】:

我在服务中有一个简单的集合引用

    firebase.auth().onAuthStateChanged(user => 
      if (user) 
          this.itineraryCollection = firebase
            .firestore()
            .collection(`itinerary/$user.uid/itineraryList`);
        
      );

我正在调用这个服务 OnInit

  ngOnInit() 
    this.loggedInUser = firebase.auth().currentUser;
    this.dataSvc.getItineraries()
    .get()
    .then( itineraryListSnapshot => 
      this.itineraries = [];
      itineraryListSnapshot.forEach(snap => 
        this.itineraries.push(
          id: snap.id,
          activities: snap.data().activities,
          destination: snap.data().destination,
          startDate: snap.data().startDate,
          endDate: snap.data().endDate,
          tripDetails: snap.data().tripDetails,
          userId: snap.data().userId
        );
      );
    );

    // this.itineraries = this.dataSvc.getUserItinerary();
    console.log('logged in user add itin page', this.itineraries);
  

但我在页面初始化时不断收到以下错误:

vendor.js:49548 ERROR Error: Uncaught (in promise): FirebaseError: [code=permission-denied]: Missing or insufficient permissions.
FirebaseError: Missing or insufficient permissions.
    at new FirestoreError (vendor.js:76086)
    at JsonProtoSerializer.push../node_modules/@firebase/firestore/dist/index.cjs.js.JsonProtoSerializer.fromRpcStatus (vendor.js:81385)
    at JsonProtoSerializer.push../node_modules/@firebase/firestore/dist/index.cjs.js.JsonProtoSerializer.fromWatchChange (vendor.js:81882)
    at PersistentListenStream.push../node_modules/@firebase/firestore/dist/index.cjs.js.PersistentListenStream.onMessage (vendor.js:90087)
    at vendor.js:90016
    at vendor.js:90056
    at vendor.js:83144
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (polyfills.js:2749)
    at Object.onInvoke (vendor.js:51123)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (polyfills.js:2748)
    at resolvePromise (polyfills.js:3189)
    at resolvePromise (polyfills.js:3146)
    at polyfills.js:3250
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (polyfills.js:2781)
    at Object.onInvokeTask (vendor.js:51114)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (polyfills.js:2780)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (polyfills.js:2553)
    at drainMicroTaskQueue (polyfills.js:2959)
    at push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask (polyfills.js:2860)
    at ZoneTask.invoke (polyfills.js:2845)

我不确定我在 firebase 中的数据库规则应该是什么,但我尝试了很多不同的规则:

      match /itinerary/userId 
            allow read; 
            allow write;
      
      
            match /itinerary/userId/itineraryList 
            allow read; 
            allow write;
      

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

将此添加到您的数据库规则选项卡:

service cloud.firestore 
  match /databases/database/documents 
    match /document=** 
      allow read, write;
    
  

【讨论】:

这应该只用于测试,因为它允许任何客户端编写。【参考方案2】:

尝试将规则更改为:

match /itinerary/userId/itineraryList/doc 
  allow read, write: if true;

请注意,“true”的 if 条件仅用于测试,因为它允许每个人都可以访问该资源。我只是在这里建议它来测试规则是否有效。

/doc 添加到匹配项 - 允许将规则应用于您正在保护的文档。

【讨论】:

【参考方案3】:

我通过将数据库的规则更改为允许任何人读取来解决这个问题,但只为连接的用户保留创建、更改、删​​除和更新的方法。注释部分用于稍后的实现,您已经为每个登录的用户定义了管理员规则,因此您可以通过那里只有管理员用户可以更改。

rules_version = '2';
service cloud.firestore 
  match /databases/database/documents 
    match /document=** 
      allow read: if true;
      allow create, update, delete, write: if request.auth != null;
      //allow create, update, delete, write: if request.auth != null && request.auth.uid == userIdAdmin;
    
  

【讨论】:

【参考方案4】:

这就是我的角色的样子,它允许我添加数据。

rules_version = '2';
service cloud.firestore 
  match /databases/database/documents 
    match /document=** 
      allow read, write: if true;
    
   

【讨论】:

以上是关于FirebaseError:[code=permission-denied]:权限缺失或不足的主要内容,如果未能解决你的问题,请参考以下文章

firebase 错误:FirebaseError:缺少权限或权限不足

FirebaseError:权限缺失或不足。 -类星体和火力基地

FirebaseError:无法获取文档,因为客户端处于脱机状态

FirebaseError:firebase.initializeApp 中未提供“projectId”

请求过多 FirebaseError

FirebaseError:预期类型“Hc”,但它是:自定义 Yc 对象]