【问题标题】:.isNewUser method from Firebase always return falseFirebase 的 .isNewUser 方法总是返回 false
【发布时间】:2021-03-25 11:54:21
【问题描述】:

我尝试使用 firebase 的 isNewUser 方法,但它一直返回 false。根据我阅读的内容,它仅适用于通过 Firebase 控制台创建的帐户,这就是我的情况。一旦用户点击“连接”并且他的信息是正确的,该函数就会被调用。

 func sign_in_handler() {
        if self.email != "" && self.pass != "" {
            Auth.auth().signIn(withEmail: self.email, password: self.pass) { (result, error) in
                if err != nil {
                    self.error = err!.localizedDescription
                    self.alert.toggle()
                    return
                }
                guard let isNew = res?.additionalUserInfo?.isNew else {return}
                print("\nIs new user? \(isNew)\n")
                if newUserStatus == true{
                    UserDefaults.standard.set(true, forKey: "status")
                    NotificationCenter.default.post(name: NSNotification.Name("status"), object: nil)
                }
                else{
                    UserDefaults.standard.set(true, forKey: "status")
                    NotificationCenter.default.post(name: NSNotification.Name("status"), object: nil)
                }
            }
        } else {
            self.error = "Wrong informations."
            self.alert.toggle()
        }
    }

感谢您的帮助!

【问题讨论】:

    标签: ios swift firebase firebase-authentication


    【解决方案1】:

    仅当当前登录与创建帐户同时发生时,isNewUser 属性才为真。所以它只会在调用createUser(... 之后发生,而不会在调用signIn(... 时发生。

    原因是它本质上比较了该用户的metadata 中的lastSignInDatecreationDate,前者是在创建帐户时设置的。因此,对于您在控制台中创建的用户,isNewUser 属性在您的应用程序中实际上永远不会为真。

    如果您想确定用户是否是最近创建的,最好将自己的 lastSignInDatecreationDate 与您认为“新”的任何内容进行比较。

    如果您想确定您之前是否见过此用户,则通常希望在您第一次看到该用户时在某个后端存储中跟踪他们的用户 ID。

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多