首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Nuxtjs+火基修复) FirebaseError:缺少或没有足够的权限

(Nuxtjs+火基修复) FirebaseError:缺少或没有足够的权限
EN

Stack Overflow用户
提问于 2021-12-24 09:34:53
回答 1查看 127关注 0票数 2

我使用Nuxt.js + Firestore,我试图从集合名为TestCollection获取数据,但显示

获取文档错误: FirebaseError:缺少或没有足够的权限。

我的本地主机显示这个。

代码语言:javascript
复制
Error getting document: FirebaseError: Missing or insufficient permissions.
    at new n (prebuilt-306f43d8-45d6f0b9.js?a6a6:188)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:10426)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:10427)
    at n.onMessage (prebuilt-306f43d8-45d6f0b9.js?a6a6:10449)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:10366)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:10397)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:15160)
    at eval (prebuilt-306f43d8-45d6f0b9.js?a6a6:15218)

下面是调用集合的方法。

代码语言:javascript
复制
async testPost(){
      try{
         await this.$fire.firestore.collection('TestCollection').get()
          .then((docs) => {
            console.log('docs:', docs)
          if (docs) {
            docs.forEach((doc) => {
              console.log(doc.data())
            })
          } else {
            console.log('No such document!')
          }
        }).catch((error) => {
          console.log('Error getting document:', error)
        })
      }catch (err){
        console.log(err)
      }
    },

在nuxt.config.js中

代码语言:javascript
复制
modules: [
    // https://go.nuxtjs.dev/axios
    '@nuxtjs/axios',
    ['@nuxtjs/firebase', {
      config: {
        apiKey: process.env.FIREBASE_API_KEY,
        authDomain: process.env.FIREBASE_AUTH_DOMAIN,
        projectId: process.env.FIREBASE_PROJECT_ID,
        storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
        messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
        appId: process.env.FIREBASE_APP_ID,
        measurementId: process.env.FIREBASE_MEASUREMENT_ID,
      },

      services: {
        firestore: true,
        storage: true,
        database: true,
      },
    }],
  ],

在database.rules.json中

代码语言:javascript
复制
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "false"
      }
    },
    "cases": {
      ".read": true
    }
  }
}

在filetore.rules中

代码语言:javascript
复制
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-24 15:06:24

您的安全规则允许任何人读取Firestore中的任何数据:

代码语言:javascript
复制
match /{document=**} {
  allow read, write: if false;
}

因此,试图从数据库读取数据的代码被这些规则所拒绝的事实是按预期工作的。

这些是默认规则,因此我强烈建议您阅读关于为Firestore总体火力基础保护数据库的文档。

首先,您需要对您的规则进行最小的更改,使您的代码能够工作,称为最小特权原则。考虑到你共享的代码,那就是:

代码语言:javascript
复制
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
    match /TestCollection/{doc} {
      allow read: if true;
    }
  }
}

因此,现在我们允许世界上的任何人阅读整个TestCollection,因为这就是您的代码所做的,但我们仍然不允许所有其他操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70471480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档