Firebase 的 .isNewUser 方法总是返回 false

Posted

技术标签:

【中文标题】Firebase 的 .isNewUser 方法总是返回 false【英文标题】:.isNewUser method from Firebase always return 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()
        
    

感谢您的帮助!

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于Firebase 的 .isNewUser 方法总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中使用 Firebase 身份验证检查用户是不是是新用户

Firebase 总用户数

从Firebase数据库中检索数据列表,并将其组成电子邮件的消息

烦人的 Firebase 登录 Xcode 控制台

Firebase 不跟踪动态链接的点击次数

颤动中的Firebase列表