我使用Nuxt.js + 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
}
}
}在filetore.rules中
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}发布于 2021-12-24 15:06:24
您的安全规则允许任何人读取Firestore中的任何数据:
match /{document=**} {
allow read, write: if false;
}因此,试图从数据库读取数据的代码被这些规则所拒绝的事实是按预期工作的。
这些是默认规则,因此我强烈建议您阅读关于为Firestore和总体火力基础保护数据库的文档。
首先,您需要对您的规则进行最小的更改,使您的代码能够工作,称为最小特权原则。考虑到你共享的代码,那就是:
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,因为这就是您的代码所做的,但我们仍然不允许所有其他操作。
https://stackoverflow.com/questions/70471480
复制相似问题