我有一个使用javascript web SDK的Firebase应用。我们的客户使用自定义身份验证方法。我们使用onDisconnect实现了在线系统。我们看到onDisconnect每小时触发一次,在大多数情况下,客户端实际上并没有断开连接。这对我们来说是一个问题,因为我们正在为我们的客户跟踪和呈现连接/断开连接事件,并且当客户端没有连接时,它会看起来像是断开连接。
我的猜测是每小时都会发生某种身份验证令牌刷新,这会导致onDisconnect触发。但是,我不知道如何更深入地确认或找到不同的根本原因。任何人都可以帮我解决这个问题吗?
有人建议这是this question的副本,但这是关于基本的onDisconnect操作,这是一个可重复的观察,即onDisconnect每小时都会触发,尽管客户端没有断开连接。
答案 0 :(得分:2)
我不知道这个111
222
函数是如何实现的。解释如何确定断开连接会很有帮助。 Firebase Id令牌每小时到期,需要刷新(在调用任何用户方法后自动刷新)。如果您使用的是实时数据库,他们会尝试在到期时刷新。发出令牌时,您可以在onDisconnect
中添加一个侦听器,并将一个计时器设置为在令牌到期之前自动刷新令牌(onAuthStateChanged
),确保不会触发断开连接。
此外,getToken(true)
将在断开连接期间失败,因为Firebase会将令牌视为已过期。
答案 1 :(得分:0)
由于您使用的是Firebase Web SDK,因此您可以通过调用以下内容获取当前令牌并检查其到期时间戳:
firebase.auth().currentUser.getToken(false); // pass false to retrieve cached token
您可以设置间隔以定期检查令牌expirationTime并尝试在令牌到期之前手动刷新令牌(例如在到期前60秒),方法是调用:
firebase.auth().currentUser.getToken(true); // pass true to force token refresh
这会阻止onDisconnect事件(.info/connected
侦听器)因令牌过期而触发。