gpt4 book ai didi

firebase - 当用户具有正确的权限时从 onsnapshot 错误中获取 'FirebaseError: Missing or insufficient permissions.'

转载 作者:行者123 更新时间:2023-12-04 15:45:17 28 4
gpt4 key购买 nike

我正在尝试创建一个文档引用,设置一个 onsnapshot 监听器,保存文档,然后上传一个文件,这将触发一个云功能,该功能将更新我正在收听的文档。但是 onSnapshot 在快照运行一次后(我猜是初始状态)给出了 'FirebaseError: Missing or insufficient permissions.' 的权限错误。

我已经尝试运行在 firebase 控制台中访问和写入数据的模拟,它没有任何错误地运行

const db = window.firebase.firestore()
const newBaseRef = db.collection('base').doc()

newBaseRef.onSnapshot(doc => {
console.log('Current data: ', doc.data())
}, function (error) {
throw error // THIS ALWAYS GETS HIT
})

newBaseRef.set({
uid: window.firebase.auth().currentUser.uid,
createdAt: window.firebase.firestore.FieldValue.serverTimestamp()
})

这是我的安全规则

service cloud.firestore {
match /databases/{database}/documents {
match /printset/{document=**} {
allow read, update, delete: if request.auth.uid == resource.data.uid
allow create: if request.auth.uid != null;
}

match /file/{document=**} {
allow read, update, delete: if request.auth.uid == resource.data.uid
allow create: if request.auth.uid != null;
}

match /base/{document=**} {
allow read, update, delete: if request.auth.uid == resource.data.uid
allow create: if request.auth.uid != null;
}
}
}

我不希望错误回调运行

最佳答案

newBaseRef.set() 返回 Promise

所以当 newBaseRef.onSnapshot() 被调用时,newBaseRef.data().uid 还没有设置。

参见:

您应该在 Promise.resolve() 之后调用 newBaseRef.onSnapshot()

const db = window.firebase.firestore()
const newBaseRef = db.collection('base').doc()


newBaseRef.set({
uid: window.firebase.auth().currentUser.uid,
createdAt: window.firebase.firestore.FieldValue.serverTimestamp()
}).then(() => {
newBaseRef.onSnapshot(doc => {
console.log('Current data: ', doc.data())
}, function (error) {
throw error // THIS ALWAYS GETS HIT
})
})

还有更多。

如果您只想插入,那么您应该使用 newBaseRef.add({})

如果你想插入或删除插入(替换所有数据),那么你应该使用 newBaseRef.set({})

如果你想 InsertUpdate 或 Update 那么你应该使用 newBaseRef.set({}, {merge, true})

如果您只想更新,那么您应该使用 newBaseRef.update({})

如果您想要 InsertUpdate 或 Update,请将您的安全规则更改为以下设置。

service cloud.firestore {
match /databases/{database}/documents {

match /printset/{document=**} {
allow read, update, delete: if request.auth.uid == resource.data.uid
allow create: if request.auth.uid != null;
}

match /file/{document=**} {
allow read, update, delete: if request.auth.uid == resource.data.uid
allow create: if request.auth.uid != null;
}

match /base/{document=**} {
allow read, delete: if request.auth.uid == resource.data.uid
allow update: if resource == null || request.auth.uid == resource.data.uid
allow create: if request.auth.uid != null;
}
}
}

关于firebase - 当用户具有正确的权限时从 onsnapshot 错误中获取 'FirebaseError: Missing or insufficient permissions.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56065707/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com