Ios 处理Swift Firebase用户登录状态的正确方法

Ios 处理Swift Firebase用户登录状态的正确方法,ios,swift,authentication,firebase,token,Ios,Swift,Authentication,Firebase,Token,我一直在浏览网页,试图找出如何处理已登录Firebase用户的用户状态,其中出现以下情况: 用户已登录到应用程序 管理员从Firebase控制台禁用/删除用户 用户仍在应用程序中(尽管该帐户已在Firebase控制台上被禁用/删除) 一个多小时后,用户仍在应用程序中。(Firebase ID令牌应已过期,并且应调用addStateDidChangeListener() 当前,如果返回错误是由于禁用/删除用户导致的,除非我调用getIDTokenForcingRefresh()和signout()

我一直在浏览网页,试图找出如何处理已登录Firebase用户的用户状态,其中出现以下情况:

  • 用户已登录到应用程序
  • 管理员从Firebase控制台禁用/删除用户
  • 用户仍在应用程序中(尽管该帐户已在Firebase控制台上被禁用/删除)
  • 一个多小时后,用户仍在应用程序中。(Firebase ID令牌应已过期,并且应调用addStateDidChangeListener()
  • 当前,如果返回错误是由于禁用/删除用户导致的,除非我调用getIDTokenForcingRefresh()和signout()用户。用户仍将登录

    总之,我有以下问题:

    • 如果用户登录到应用程序,除非调用signout(),否则该用户将保持登录状态。是否禁用或删除用户帐户并不重要
    • Firebase ID令牌1hour expiration仅触发addStateDidChangeListener(),但我必须处理处理程序内部的操作
    • 如果使用ReAuthenticationWithCredential()检查用户的更新状态,有什么区别

    感谢您事先提供的任何澄清和帮助!=)

    我不知道是否会回答你们所有的问题,但我可以根据我在Firebase的经验给你们一些信息

    据我所知,若用户被删除或禁用,他仍将登录应用程序,直到令牌过期。在用户被禁用/删除后,任何时候您试图操纵Firebase中的某些数据(读、写,无论什么),结果块中都会出现错误。这时,您应该检查它是什么类型的错误,并执行一些操作。在这种情况下,如果错误匹配已删除/禁用的用户,您应该将其注销并进入登录屏幕。是所有错误的列表


    reauthenticateWithCredential()是一种方法,但从Firebase读取其他数据时会出现相同的错误。因此,如果用户被禁用,调用ReAuthenticationWithCredential()将返回一个错误,错误代码为FIRAuthErrorCodeUserDisabled。这就是您检测到该用户被禁用的方式。

    我不知道是否会回答您所有的问题,但我可以从我使用Firebase的经验中为您提供一些信息

    据我所知,若用户被删除或禁用,他仍将登录应用程序,直到令牌过期。在用户被禁用/删除后,任何时候您试图操纵Firebase中的某些数据(读、写,无论什么),结果块中都会出现错误。这时,您应该检查它是什么类型的错误,并执行一些操作。在这种情况下,如果错误匹配已删除/禁用的用户,您应该将其注销并进入登录屏幕。是所有错误的列表


    reauthenticateWithCredential()是一种方法,但从Firebase读取其他数据时会出现相同的错误。因此,如果用户被禁用,调用ReAuthenticationWithCredential()将返回一个错误,错误代码为FIRAuthErrorCodeUserDisabled。这就是您检测该用户被禁用的方式。

    我做了一些进一步的测试,禁用的用户仍然能够在令牌过期前1小时内成功写入数据库。即使getIDTokenForcingRefresh()返回用户帐户已被禁用。用户被禁用1小时后,我无法写入数据库。但是,即使在使用完成块调用ref.setValue()时,也没有任何状态返回。reauthenticateWithCredential()是一种方法,但是用户体验没有那么好,因为它需要用户再次输入他们的凭据。@很好,您已经返回了信息,谢谢!我想另一种方法是在数据库中保存一些关于用户状态的信息并手动处理。例如,每个用户都有一个属性
    enabled:true/false
    ,您可以使用该数据确定用户是否已启用。@#firebase您需要修复此问题!?这是一个主要的安全漏洞!?我做了一些进一步的测试,禁用的用户仍然能够在令牌过期前1小时内成功写入数据库。即使getIDTokenForcingRefresh()返回用户帐户已被禁用。用户被禁用1小时后,我无法写入数据库。但是,即使在使用完成块调用ref.setValue()时,也没有任何状态返回。reauthenticateWithCredential()是一种方法,但是用户体验没有那么好,因为它需要用户再次输入他们的凭据。@很好,您已经返回了信息,谢谢!我想另一种方法是在数据库中保存一些关于用户状态的信息并手动处理。例如,每个用户都有一个属性
    enabled:true/false
    ,您可以使用该数据确定用户是否已启用。@#firebase您需要修复此问题!?这是一个主要的安全漏洞!?可能的重复可能的重复