【发布时间】:2021-05-20 23:37:21
【问题描述】:
根据文档,我正在这样做:
var currentUser;
firebase.auth().onAuthStateChanged(function(user) {
if (user && user.emailVerified) {
currentUser = user;
setPresence();
}
});
function setPresence() {
var myConnectionsRef = firebase.database().ref('users/' + currentUser.uid + '/connections');
var connectedRef = firebase.database().ref('.info/connected');
connectedRef.on('value', function(snap) {
if (snap.val() === true) {
var con = myConnectionsRef.push();
con.onDisconnect().remove();
con.set("profile");
}
});
}
我在每个页面上都这样做,但它似乎不适用于个人资料页面。这是我在数据库中看到的:
这不是一次性的。几乎所有用户都有类似的东西。这可能是什么原因?为什么 onDisconnect 不会触发?
如果需要,这里是网页:magicconnects.com/profile。
非常感谢您的帮助!
编辑:添加安全规则:
{
"rules": {
"users": {
"$uid": {
".read": "auth != null",
".write": "auth != null && auth.uid == $uid"
}
}
}
}
【问题讨论】:
-
1)
onDisconnect处理程序执行之前可能需要几分钟,因为它通常依赖于服务器来检测客户端已消失。 2) 您是否有阻止remove()执行的安全规则? -
将它们添加到帖子中 - 它们似乎不是问题。 90% 的用户仍然具有与图片中相似的状态。我只是按照文档。关于如何调试它的任何提示?可以肯定的是,这是我的定义,对吧?或者可能是 Firebase 问题?
-
我记得不久前在
onDisconnect处理程序中看到过身份验证问题。您是否可以尝试允许未经身份验证的写入或(如果这对您的数据库太危险)至少未经身份验证的数据删除?如果可行,至少我们知道是什么导致了问题。 -
“读取,如果为真则写入”版本的安全规则有效,但 obv 这并不理想。你会建议我做什么?另外,如何允许未经身份验证的数据删除?我找不到像 .delete 这样的东西。谢谢!
标签: javascript firebase firebase-realtime-database user-presence