【问题标题】:Do I need to call firebase.database.on() again after token refresh?令牌刷新后是否需要再次调用 firebase.database.on()?
【发布时间】:2020-09-13 06:44:18
【问题描述】:

我的应用程序遇到了这个问题,它最终会(不确定时间范围,大概是 1 小时)停止实时更新 firebase 实时数据库更改,而无需注销并重新登录。安全规则可防止未经授权的用户访问数据.用户将保持登录状态并且身份验证会话仍然存在,所以我一直很困惑为什么它最终会停止更新。

经过大量的互联网搜索,我发现登录时提供的令牌 ID 仅持续 1 小时,此时它们会使用刷新令牌自动刷新。 (作为记录,我使用firebase.auth().signInWithEmailAndPassword 登录)。

现在,我的问题 - 刷新令牌 ID 后是否需要重新订阅我的数据库?更具体地说,当检测到令牌刷新时,我是否需要先调用firebase.database().ref().off(),然后再调用firebase.database().ref().on()?如果没有,您能否指出可能出现问题的方向?

编辑:可能还值得注意的是,如果我更改我的安全规则以允许未经身份验证的读取,用户仍然可以无限期地写入数据库而无需重新进行身份验证。

【问题讨论】:

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


    【解决方案1】:

    Firebase 会自动将新的身份验证令牌传递给数据库。只要用户保持不变,您就不需要重新附加监听器。

    您可能需要重新连接的唯一时刻是用户以某种方式退出登录。这可能在无法刷新 ID 令牌时发生,例如因为帐户已被禁用或密码已更改。在这种情况下,现有的侦听器将被取消,这将记录在客户端中,并且将调用 on 的(可选)错误回调。此时,您需要重新验证并附加新的侦听器。

    【讨论】:

    • 嘿弗兰克感谢您的回复。关于为什么我的客户会突然停止从我的数据库中读取数据,我可能会遗漏什么吗?
    • 如果没有看到minimal reproduction of the problem,这很难说。因此,我对您是否需要每小时重新连接听众的具体问题的回答是:不,您不需要。
    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 2019-12-29
    • 2019-09-19
    • 2015-11-10
    • 2013-11-27
    • 1970-01-01
    • 2022-10-31
    • 2021-08-26
    相关资源
    最近更新 更多