【问题标题】:(Nuxtjs+ Firebase Firestore) FirebaseError: Missing or insufficient permissions(Nuxtjs+ Firebase Firestore)FirebaseError:缺少权限或权限不足
【发布时间】:2022-01-25 00:02:36
【问题描述】:

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

获取文档时出错:FirebaseError:权限缺失或不足。

我的本​​地主机显示这个。

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)

这里是调用集合的方法。

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 中

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中

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "false"
      }
    },
    "cases": {
      ".read": true
    }
  }
}

在文件存储规则中

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

【问题讨论】:

    标签: javascript google-cloud-firestore nuxt.js firebase-security


    【解决方案1】:

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

    match /{document=**} {
      allow read, write: if false;
    }
    

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

    这些是默认规则,因此我强烈建议您阅读有关保护Firestore specificallyFirebase overall 的数据库的文档。


    您需要先对规则进行最小的更改,以使您的代码能够正常工作,称为principle of least privilege。鉴于您共享的代码,那就是:

    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,因为您的代码似乎就是这样做的,但我们仍然不允许所有其他操作。

    【讨论】:

    • 现在,我使用允许读取:如果某些文档为真。非常感谢 ^ ^
    猜你喜欢
    • 2022-01-15
    • 2021-10-31
    • 2021-06-20
    • 2021-12-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多