当读取权限不再被拒绝时,React Firestore Hooks 无法更新

问题描述 投票:0回答:2

我正在使用 react-firebase-hooks,特别是 useDocumentData,以便获取文档并保持更新。

当钩子初始化时,尚不允许读取文档(由于未满足 Firestore 安全规则中的某些条件),因此读取失败并显示

FirebaseError: Missing or insufficient permissions.

但是几分钟后数据库发生变化,文档可以成功读取。

如果我刷新页面,它可以正常工作 - 否则挂钩不会自动更新。

我该如何解决这个问题?我需要它自动检测是否有读取此文档的权限,并让我及时了解其数据。

reactjs firebase google-cloud-firestore react-hooks firebase-security
2个回答
2
投票

我需要它自动检测是否有读取此文档的权限,并让我及时了解其数据。

如果不亲自进行查询,您将无法执行此操作。一旦查询侦听器因权限错误而失败,它将不会继续侦听。没有回调告诉您何时再次允许查询。

您可以选择:

  1. 为更改的数据设置另一个查询侦听器,这将使原始查询能够工作,然后重新发出该原始查询。
  2. 或者您需要定期轮询查询以查找它是否正常工作。

0
投票

这就是我为完成这项工作所做的工作。我遇到过类似的情况,初始查询由于缺乏权限而失败,直到用户被添加为管理员。然后我需要重新获取

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);

© www.soinside.com 2019 - 2024. All rights reserved.