Firebase - additionalInfo.isNewUser总是返回“false”

3
我使用Node.js和Firebase管理员SDK创建新用户。
这个过程很顺利,我在Firebase控制台上看到了新用户信息,当然他从未登录过(在德语中为“Angemeldet”): Console 现在我想要在iOS用户登录时检查该用户是否是第一次登录。
Auth.auth().signIn(withEmail: email, password: password) { (user, error) in

    if let error = error
    {
        self.errorText = error.localizedDescription
        self.shouldAnimate = false
        return
    }

    guard user != nil else { return }

    if let user = user, let additionalInfo = user.additionalUserInfo {
        print(additionalInfo.isNewUser) // Always "false"
        self.userViewModel.firstLogin()
    }
}

additionalInfo.isNewUser 看起来正是我需要的,但它总是返回“false”。

在Node.js中,我使用以下命令创建用户:

  await admin.auth().createUser({
  uid: uid.toLowerCase(),
  email: uid.toLowerCase(),
  emailVerified: true,
  password: 'notSetYet',
  disabled: false
})

这是一个bug吗,还是我操作有误?

1个回答

5

isNewUser属性基本上比较了creationDatelastSignInDate的值,如果它们相等,则返回true。由于用户在客户端登录之前在服务器上创建,时间戳永远不会相同,因此isNewUser将始终为false

我能想到的两个主要选项是:

  1. 检查lastSignInDatecreationDate之间的某个范围,在该范围内您认为用户是“新的”。
  2. 从您的Swift代码中将是否已经查看过该用户存储在云数据库(例如Firebase的实时数据库或Cloud Firestore)中,并检查触发所需的任何“新用户”行为。

1
谢谢您提供这些信息!如果isNewUser是由第一次真正的登录而不是某些时间比较来切换的话,那将是一个很棒的功能。尽管如此,我还是因为您而找到了解决方案! :-) - Kuhlemann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接