Firebase-additionalInfo.isNewUser 始终返回“false”

Kuh*_*ann 3 javascript firebase swift firebase-authentication

我使用 Node.js 通过 Firebase Admin SDK 在 Firebase 中创建新用户。

这个过程运行良好,我在 Firebase 控制台中看到新用户当然从未有过登录日期(德语为“Angemeldet”): 安慰

现在我想检查用户的 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()
    }
}
Run Code Online (Sandbox Code Playgroud)

extraInfo.isNewUser 似乎正是我所需要的,但它总是返回“false”。

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

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

这是一个错误,还是我做错了什么?

Fra*_*len 5

该属性本质上是比较和isNewUser的值,如果相等则返回。由于您的用户是在您登录然后在客户端上创建之前在服务器上创建的,因此时间戳永远不会相同,并且始终为。creationDatelastSignInDatetrueisNewUserfalse

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

  1. 检查您认为该用户是“新”用户lastSignInDate之间的某个范围。creationDate
  2. 通过 Swift 代码将您之前是否见过该用户存储在云数据库(例如 Firebase 的实时数据库或 Cloud Firestore)中,并检查以触发您需要的任何“新用户”行为。