Firebase Auth lastSignInDate和creationDate比较失败

时间:2019-02-06 21:28:44

标签: swift firebase firebase-authentication

首先,在这种情况下,我需要知道这是第一个用户的登录名(登录后注册也算作首次登录),因此我可以将其添加到数据库中。为此,我需要进行以下检查:

func isNewUser(userMetadata: UserMetadata) -> Bool {
    return userMetadata.creationDate == userMetadata.lastSignInDate && !UserDefaults.standard.hasLoggedIn
}

我需要进行UserDefaults检查,因为在用户注销之前,creationDate和lastSignInDate将是相等的。

直到今天,当我收到这些奇怪的日志时,一切都运转良好:

(lldb) po userMetadata.creationDate
▿ Optional<Date>
  ▿ some : 2019-02-06 21:18:15 +0000
    - timeIntervalSinceReferenceDate : 571180695.0

(lldb) po userMetadata.lastSignInDate
▿ Optional<Date>
  ▿ some : 2019-02-06 21:18:15 +0000
    - timeIntervalSinceReferenceDate : 571180695.1040001

日期看起来一样,但是对相等性的检查失败。

我称之为isNewUser的代码:

authListener = Auth.auth().addStateDidChangeListener { [unowned self] (auth, user) in
   if let firebaseUser = user, Auth.auth().isNewUser(userMetadata: firebaseUser.metadata) {
       self.handleNewUser(firebaseUser)
   }
}

该文档对首次登录没有太多说明。我知道isNewUser类中有一个AdditionalUserInfo属性,但是我不知道该如何使用。因此,任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

firebaser here

这可能与我们正在研究的一些后端更改有关。目前,您可以在比较之前将timeIntervalSinceReferenceDate的值四舍五入。

但是最近最好使用AdditionalUserInfo.newUser进行此检查。您是从AuthDataResult获得的,因此在用户登录后就可以像使用signIn(withEmail:password:completion:)这样。在FirebaseUI中,您还可以获得AuthDataResult,如下所示:https://github.com/firebase/FirebaseUI-iOS/tree/master/Auth#sign-in