【问题标题】:Firebase check if account is disabledFirebase 检查帐户是否被禁用
【发布时间】:2017-03-07 09:36:06
【问题描述】:

我目前正在尝试创建一个自动检测帐户是否已被禁用的功能。

我的意思是我希望用户自动注销,并且无权执行任何操作。

我知道有关权限的内容是在 Firebase 安全和规则中完成的。但是,我不知道如何禁止来自禁用帐户的活动。我只熟悉 auth.uid 和变量。

如果我想这样做,我应该如何进行?

我曾想过为用户进入的每个表单重新验证身份,但我很快发现这是对数据的不必要使用。

或者这是要走的路?

【问题讨论】:

    标签: swift swift3 firebase-authentication


    【解决方案1】:

    其中一种方法是使用身份验证。您需要重新验证 firebase 用户:

    user?.reauthenticateWithCredential(credential) { error in
      if let error = error {
        // An error happened.
      } else {
        // User re-authenticated.
      }
    }
    

    如果帐户被禁用,您会收到 FIRAuthErrorCodeUserDisabled 错误。 在某个时间间隔循环运行它。

    【讨论】:

    • 我明白了,感谢您的意见。但是,我对如何执行此操作感到非常困惑,因为为了获得凭据,我需要登录/或登录(就我而言)。那么,如果不每次都询问电子邮件和密码,我该怎么做呢?
    • 您需要将这些凭据(当用户第一次登录时)保存在 userdefaults 或持久存储中。
    【解决方案2】:

    我重新加载了当前用户,如果它被禁用你会得到一个错误:

    if let userInfo = Auth.auth().currentUser {
                userInfo.reload(completion: { (error) in
                    guard error == nil else {
                        debugPrint(error.debugDescription)
                        return
                    }
                })
    }
    

    【讨论】:

    • 在这里添加错误代码检测可能很有用,网络错误和用户禁用不应区别对待...有趣的值是 // error._code == 17020 user is offline // error._code == 17005 用户帐户已被管理员禁用。 // error._code == 17011 帐户已删除
    【解决方案3】:

    你之前问过,希望回答对你有帮助:

    你可以为 authStateDidChange 添加一个观察者,所以如果用户退出,它就会被触发

    NotificationCenter.default.addObserver(forName: NSNotification.Name.AuthStateDidChange, object: Auth.auth(), queue: nil) { _ in
    
                if ((Auth.auth().currentUser) == nil) {
                    let storyboard = UIStoryboard(name: "Main", bundle: nil)
                    let mvc = storyboard.instantiateViewController(withIdentifier: "MainViewController")
                    self.window!.rootViewController = mvc
                    let options: UIView.AnimationOptions = .transitionCrossDissolve
                    let duration: TimeInterval = 0.1
                    UIView.transition(with: self.window!, duration: duration, options: options, animations: {}, completion:
                    { completed in
                        self.window?.rootViewController?.performSegue(withIdentifier: "showWelcomeView", sender: nil)
                    })
                }
            }
    

    现在很酷的事情是,如果你调用 reload 命令,就像之前提到的 MegaChan,并且用户被禁用或删除,firebase 控制器将用户注销,观察者触发 authstate 确实改变了,你的登录屏幕,在我的例子中Welcomeviewcontroller 出现了 ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2017-04-24
      • 2018-01-13
      • 2017-06-18
      • 1970-01-01
      相关资源
      最近更新 更多