[英]Uncaught Error in snapshot listener: FirebaseError: Missing or insufficient permissions
[英]Uncaught Error in snapshot listener: FirebaseError: no matching index found
运行以下查询时出现上述错误。 我以前没有见过它,找不到任何关于它的文档,而且我没有做任何不寻常的事情或我以前没有做过的任何事情。 任何人都可以对此有所了解吗?
const getUserProjects = async () => {
return await useFireStore
.collection('projects')
.where('paid','==',true)
.where('ownerId','==', `${currentUser.uid}`)
.orderBy('createdAt', 'desc')
.onSnapshot(snapshot => {
let projects = [];
snapshot.forEach(doc => {
projects.push({...doc.data(), id: doc.id })
});
setUserProjects(projects);
});
};
这是一个“新”查询,因为我刚刚将它添加到代码中,所以我可能期望控制台中的错误提供了一个链接,用于创建一个新的复合索引或任何它被调用的名称,但我只是得到这个:
编辑:我尝试手动创建索引,但仍然遇到相同的错误。 我也在同一页面上得到了一个查询,除了集合名称之外,它完全相同,并且工作正常。
这是 SDK 中的内部错误。
Firebase 团队正在研究它,请在此处关注问题。
这是客户端 SDK的一个已知问题。 但是,Admin SDK 仍然照常工作,并返回一个包含创建索引链接的错误,可以用作解决方法。 只需通过 Admin SDK 在本地使用 Firebase Functions Emulator。
使用现有的 Firebase 项目或为此创建一个新项目:
firebase init functions
复制以下函数:
export const getIndexLink = functions.https.onRequest(async (request, response) => {
try {
const snap = await admin.firestore()...get()
// Paste your query here
response.send(snap.size, "matched documents");
} catch (error) {
console.log(error)
response.send(error.message)
// This error will contain the index creation link
}
});
运行函数模拟器:
firebase emulators:start --only functions
打开浏览器并粘贴您的getIndexLink
函数的 URL,您应该拥有在那里创建索引的 URL。
您必须从 Firestore 控制台手动创建一个新索引
更多信息: https : //firebase.google.com/docs/firestore/query-data/indexing?authuser=0#create_a_missing_index_through_an_error_message
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.