【问题标题】:Firebase Web client - signed out while still connected?Firebase Web 客户端 - 在仍然连接的情况下退出?
【发布时间】:2019-05-20 22:48:10
【问题描述】:

我有一个 Web 客户端使用我的服务器上生成的自定义令牌登录 Firebase,即

const firebase = firebase.initializeApp(config);
myAPI.getFirebaseAuthToken().then((token) => { 
    firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE).then(() =>
     firebase.auth().signInWithCustomToken(token).then(() => {
        const myPres = firebase.database.ref('/presences').push({
           id: my_user_id,
           time: new Date().getTime(),
           //               etc                 
        });
        myPres.onDisconnect().remove();
      });
});

有没有一种方法可以使该客户端在不断开连接的情况下未经身份验证?

我问是因为我有很多 onDisconnect 处理程序的引用似乎没有被调用。这些引用与用户的存在有关,因此我有一条规则可以防止这些引用被其他任何人编写。所以我开始怀疑用户未经身份验证,然后在断开连接时,写入失败,因为用户无权访问。

这可能是什么原因造成的?

【问题讨论】:

  • 我写下了身份验证状态和onDisconnect 的工作原理。如果这不能帮助解释您的问题,您可能需要更新您的问题以显示允许我们重现该行为的最少代码。您分享的代码与实时数据库无关,因此不能单独触发onDisconnect 触发器。
  • 我编辑了这个问题。我遇到的问题是,有时,我在这里创建的参考永远不会消失。我能想到的唯一解释是用户在客户端断开连接之前以某种方式变得未经身份验证,因此 onDisconnect 失败,因为客户端不再具有对该引用的写访问权限。
  • 您可以通过确保客户端有权删除引用来验证该理论,即使他们没有经过身份验证。如果你的理论是正确的,onDisconnect 应该在这种情况下工作。

标签: javascript firebase firebase-realtime-database firebase-authentication


【解决方案1】:

进行身份验证是一个 Firebase 身份验证概念。身份验证会话从用户成功登录开始一直持续到他们退出,或者他们的会话无法再延长(如果他们的帐户被禁用或删除等)。

onDisconnect 是一个 Firebase 实时数据库概念。客户端使用 Web 套接字与服务器通信,服务器使用这些套接字的状态来确定客户端是否仍处于连接状态。

实时数据库客户端绝对有可能失去与服务器的连接,而用户不会失去他们的身份验证状态。反过来也是可能的:用户可以退出,同时保持与数据库的连接。

【讨论】:

  • 谢谢,我编辑了问题以获取更多详细信息。您能否详细说明用户在仍然连接的情况下如何退出(除了帐户被禁用/删除)吗?
  • 一般来说,Firebase 数据库不需要对用户进行身份验证即可访问。您的应用程序/安全规则可能要求这样做,但数据库本身不需要。
猜你喜欢
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多