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
中的lastSignInDate
和creationDate
,前者是在创建帐户时设置的。因此,对于您在控制台中创建的用户,isNewUser
属性在您的应用程序中实际上永远不会为真。
如果您想确定用户是否是最近创建的,最好将自己的 lastSignInDate
和 creationDate
与您认为“新”的任何内容进行比较。
如果您想确定您之前是否见过此用户,则通常希望在您第一次看到该用户时在某个后端存储中跟踪他们的用户 ID。
【讨论】:
以上是关于Firebase 的 .isNewUser 方法总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中使用 Firebase 身份验证检查用户是不是是新用户