【问题标题】:Firebase - Automatically sign out user onDisconnectFirebase - 自动注销用户 onDisconnect
【发布时间】:2018-07-26 22:15:15
【问题描述】:

由于我注意到一旦用户使用电子邮件和密码登录,在重新打开应用程序时会话不会过期并且不需要新的身份验证,我希望避免这种情况。

我想在触发.onDisconnect 时自动.signOut() 用户。我怎样才能做到这一点?我尝试了以下代码,但没有成功:

firebase.auth().onDisconnect().signOut();

【问题讨论】:

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


    【解决方案1】:

    当您说“onDisconnect”时,我假设您指的是实时数据库 onDisconnect 触发器。

    首先要了解 onDisconnect 是在实时数据库和客户端应用程序之间的套接字连接关闭时触发。这可能由于多种原因而发生,并且可能随时发生,即使该应用程序看似具有良好的互联网连接。所以,要小心你在这里尝试做的事情。

    此外,onDisconnect 触发器只能直接影响数据库中的数据,而不会影响其他任何内容。因此,这限制了您可以有效完成的工作。您无法在客户端应用程序中执行任何操作以响应 onDisconnect。

    在这两个事实之间,您尝试做的事情实际上是不可能的,并且,我不认为这是可取的。您最终可能会因为他们的火车暂时进入地下而退出用户,或者如果他们只是退出应用程序一段时间。这会给用户带来极大的不便。

    如果您想自动注销用户,我强烈建议您找到其他方法来执行此操作,例如编写一些代码来记住用户使用您的应用程序的时间,并在基于您首选逻辑的客户端应用程序。

    【讨论】:

    • 哦,谢谢,这让我对.onDisconnect有了很好的了解。但是,我目前正在尝试实现user presence system,如果用户在未注销的情况下关闭应用程序,则在重新打开它时,会自动加载登录页面。但是,this.afAuth.authState 仍然持有该用户的会话,因此执行上面教程中的 .subscribe。如果用户登录另一个帐户,这不会导致问题吗?处理以下情况的正确方法是什么?
    • 用户不能在同一台设备上两次登录您的应用。他们必须退出一个并进入另一个。存在与身份验证不同。 Presence 只是说“我知道你在这里,因为你已经连接了”,而 auth 说“我知道你是谁,因为你通过了身份验证测试”。它们根本不是一回事,也没有真正的相关性,我认为尝试将它们结合起来并不明智。
    【解决方案2】:

    onDisconnect() 与数据库连接有关,与您的认证用户关系不大。如:onDisconnect() 可能会在您的用户登录时触发,这仅仅是因为与数据库的连接暂时断开。

    但更重要的是:onDisconnect 处理程序在服务器端运行,一旦服务器检测到客户端已经消失。当这是因为如果一个脏断开连接(例如应用程序崩溃),客户端将无法再检测到这一点。

    您最可能需要的方法是在用户关闭应用时简单地退出。

    您可能希望在客户端中将侦听器附加到.info/connected。这是一个客户端侦听器,当客户端检测到它已连接或断开连接时触发。

    【讨论】:

      猜你喜欢
      • 2018-06-06
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多