【问题标题】:Can't unsubscribe from realtime updates: Uncaught Error in onSnapshot: Error: Missing or insufficient permissions无法取消订阅实时更新:onSnapshot 中的未捕获错误:错误:缺少权限或权限不足
【发布时间】:2019-01-29 05:25:09
【问题描述】:

我在使用 Firestore 的 onSnapshot 方法取消订阅更新时遇到了一些问题。

我与外部工作人员一起对文件进行了一些处理。它在完成后更新 Firestore 数据库。我使用以下代码在前端收听这些更新:

import store from "../store";
import db from "./firebase"
import { updateModelConversionProgress } from "../actions/updateModelConversionProgress";

const listenForConversions = (resource, id) => {
  const modelRef = db.collection(resource).doc(id);
  const unsubscribe = db.collection(resource).doc(id).onSnapshot(() => {});
  modelRef.onSnapshot(doc => {
    const model = doc.data();
    if (model) {
      store.dispatch(
        updateModelConversionProgress(
          id,
          model.file.uniqueFilename,
          model.conversionStatus
        )
      );
    }
    if (model && model.conversionStatus === "completed") {
      // Unsubscribe from updates
      unsubscribe();
    }
  });
};

export default listenForConversions;

这一切都很好,我的 UI 会在数据库更新时更新。但是,如果我删除此文件,我会在控制台中收到以下错误:Uncaught Error in onSnapshot: Error: Missing or insufficient permissions

我认为这与文档已被删除因此用户无法再访问它的事实有关(我的安全规则只允许用户访问具有其用户 ID 的文档)因此Missing or insufficient permissions part。无论如何,UI 不应再监听更新,这让我想知道为什么我会收到此错误消息?我尝试使用相同的文档引用(即const unsubscribe = modelRef.onSnapshot(() => {});)传递一个空回调,但我只收到两次错误消息。 documentation implies 无论如何我都应该使用不同的文档参考。我很确定我没有正确退订,但我不确定要更改什么。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    您看到的错误是故意的。只有在明确允许的情况下,您才能查看数据。由于没有数据可以执行规则,因此明确给出权限,因此出现错误。

    如果您不想看到错误出现在控制台或冒泡,您可以随时传递处理该特定错误的onError 函数。

    【讨论】:

    • 我了解此特定错误的原因,但我正在尝试取消订阅此特定文档的更改。错误的存在似乎表明我仍然订阅了它,因此当它被删除时,onSnapshot 方法被调用(它不应该是因为我取消订阅了)。
    • @quicklikerabbit 抛出错误时,您将不再订阅,因为您无权访问。本质上它会自动退订您。
    • 我明白了。这确实有道理,因为我只在删除时收到错误消息。即使我已经取消订阅,仍然会调用 onSnaphsot 方法。
    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2021-03-10
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多