【发布时间】: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