首页 > 解决方案 > Firebase - additionalInfo.isNewUser 始终返回“false”

问题描述

我使用 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()
    }
}

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

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

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

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

标签: javascriptswiftfirebasefirebase-authentication

解决方案


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

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

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

推荐阅读