我正在使用 react-firebase-hooks,特别是 useDocumentData,以便获取文档并保持更新。
当钩子初始化时,尚不允许读取文档(由于未满足 Firestore 安全规则中的某些条件),因此读取失败并显示
FirebaseError: Missing or insufficient permissions.
但是几分钟后数据库发生变化,文档可以成功读取。
如果我刷新页面,它可以正常工作 - 否则挂钩不会自动更新。
我该如何解决这个问题?我需要它自动检测是否有读取此文档的权限,并让我及时了解其数据。
我需要它自动检测是否有读取此文档的权限,并让我及时了解其数据。
如果不亲自进行查询,您将无法执行此操作。一旦查询侦听器因权限错误而失败,它将不会继续侦听。没有回调告诉您何时再次允许查询。
您可以选择:
这就是我为完成这项工作所做的工作。我遇到过类似的情况,初始查询由于缺乏权限而失败,直到用户被添加为管理员。然后我需要重新获取
useDocumentData
。
// Set item fetching status which is true on page load.
const [fetchItem, setFetchItem] = React.useState(true);
// Fetch item.
const [data, dataLoading, dataError] = useDocumentData(
itemId && fetchItem
? doc(db, "items", itemId).withConverter(ItemConverter)
: undefined
);
React.useEffect(() => {
// If our query fails due to initial permissions, update the fetch state.
if (dataError?.code === "permission-denied") setFetchItem(false);
}, [dataError?.code]);
// Some other page where the user is added as an admin etc.
// After a successful update, call setFetchItem to rerun useDocumentData.
setFetchItem(true);