【问题标题】:React Firebase Logout反应 Firebase 注销
【发布时间】:2022-01-04 07:14:38
【问题描述】:

在我的 app.js 中有:

<IconButton size="small" onClick={() => firebase.auth().signOut()}>
  <ExitToAppIcon />
</IconButton>

这会使用户退出(如果我刷新页面),否则会挂起。

我收到以下控制台错误:

快照侦听器中未捕获的错误:FirebaseError:缺少权限或权限不足。

它看起来与快照相关,例如:

const useItems = () => {
  const user = firebase.auth().currentUser;
  const user1 = user.uid;
  const [items, setItems] = useState([]);
  useEffect(() => {
    const unsubscribe = firebase
      .firestore()
      .collection("gear")
      .where("User", "==", user1)
      .orderBy("Name", "asc")
      .onSnapshot(snapshot => {
        const listItems = snapshot.docs.map(doc => ({
          id: doc.id,
          Name: doc.data().Name
        }));
        setItems(listItems);
      });
  }, []);
  return items;
};

如果我有一个不使用快照的组件,它可以正常工作。如何强制用户成功退出?

【问题讨论】:

  • 您能解决问题吗?

标签: reactjs firebase google-cloud-firestore firebase-authentication


【解决方案1】:

您的安全规则似乎要求用户登录后才能读取数据库,这是一件好事。

但这意味着您需要在注销用户之前断开侦听器与数据库的连接。

<IconButton size="small" onClick={() => { unsubscribe(); firebase.auth().signOut()} }>

注意:

  • 即使您不取消订阅,在您拨打firebase.auth().signOut() 后,用户仍然会退出。实际上,错误消息来自用户已注销,因此客户端不再具有读取数据的权限。
  • 错误消息还会删除侦听器。所以你的原始代码和我调用unsubscribe()的代码之间的最终结果是一样的,只是调用unsubscribe()不会显示错误消息。

【讨论】:

  • 谢谢@Frank van Puffelen - 我在其他帖子中看到了这一点,但是当使用 unsubscribe() 我得到 'unsubscribe' is not defined no-undef - 我的快照在其他组件中 - signOut 是app.js 的一部分 - 所以我需要以某种方式在 app.js 中对 const 进行排序?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2018-11-30
  • 2021-08-03
  • 2016-09-21
  • 1970-01-01
相关资源
最近更新 更多