gpt4 book ai didi

ios - Swift iOS Firebase - 如果 FirebaseAuth.FIRUser 对象不是 nil,它上面的 .email 怎么可能返回 nil?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:04:09 24 4
gpt4 key购买 nike

我使用 Firebase 的电子邮件/密码登录方法为用户创建一个帐户。使用该方法,用户必须有一个电子邮件地址才能通过 Firebase 的身份验证。

FirebaseAuth 有一个名为 UserFIRUser 对象

enter image description here

当用户首次在回调中创建帐户或登录现有帐户时,User 对象被初始化:

创建帐户:

Auth.auth().createUser(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: {
(user, error) in

// user's auth credentials are now created but user can still be nil

登录现有帐户:

Auth.auth().signIn(withEmail: self.emailTextField.text!, password: self.passwordTextField.text!, completion: {
(user, error) in

// user's auth credentials are now accessed but user can still be nil

User 对象有一个字符串类型的 .email 可选,其中包含用户的电子邮件地址。

enter image description here

我使用单例类来管理通过 Firebase 发生的所有事情,在上述两种情况下,当 User 对象被初始化时,我将该数据传递给我的 Firebase 单例类属性。我知道 User 对象可以返回为 nil,所以我运行一个 if-let 来确保它不是。

我的问题是,如果 User 对象在回调中不是 nil,是否使用电子邮件/密码登录方法是否有可能 .email 即使需要创建帐户或登录,也可以为零吗?

在我运行 if-let 语句后,我使用 guard 语句来检查并查看 .email 是否不是 nil 但它似乎它可以在 FirebaseSingleton 属性初始化之前运行(这意味着它将为 nil),或者如果保证 User 对象返回一个值则它可能是不必要的。

顺便说一句,在这两种情况下,无论用户是在创建帐户还是登录,emailTextFiled 和 passwordTextField 都不会为零。我对它们运行空白、.isEmpty 和 != nil 检查。

我的代码:

class FirebaseSingleton{

static let sharedInstance = FirebaseSingleton()

var dbRef: DatabaseReference? = Database.database().reference()
var storageDbRef: StorageReference? = Storage.storage().reference(forURL: "gs://blablabla.appspot.com")
var currentUser: User? = Auth.auth().currentUser
var currentUserID: String? = Auth.auth().currentUser?.uid
var currentUserEmail: String? = Auth.auth().currentUser?.email
var currentUserPhotoUrl: URL? = Auth.auth().currentUser?.photoURL
var currentUserDisplayName: String? = Auth.auth().currentUser?.displayName
}

创建一个帐户:

Auth.auth().createUser(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: {
(user, error) in

if error != nil { return }

if let user = user{

let sharedInstance = FirebaseSingleton.sharedInstance
sharedInstance.currentUser = user
sharedInstance.currentUserID = user.uid
sharedInstance.currentUserEmail = user.email // at this point is it possible for this to be nil?
sharedInstance.currentUserPhotoUrl = user.photoURL
sharedInstance.currentUserDisplayName = user.displayName
}else{
return
}

// is this guard statement necessary?
guard let email = user.uid else { return }
})

登录现有帐户:

Auth.auth().signIn(withEmail: emailTextField.text!, password: passwordTextField.text!, completion: {
(user, error) in

if error != nil { return }

if let user = user{

let sharedInstance = FirebaseSingleton.sharedInstance
sharedInstance.currentUser = user
sharedInstance.currentUserID = user.uid
sharedInstance.currentUserEmail = user.email // at this point is it possible for this to be nil?
sharedInstance.currentUserPhotoUrl = user.photoURL
sharedInstance.currentUserDisplayName = user.displayName
}else{
return
}

// is this guard statements necessary?
guard let email = user.uid else { return }
})

最佳答案

不确定你到底在问什么(因为对我来说看起来更像是一个快速的问题而不是一个 firebase 问题),但只要用户不是 nil,uid 属性就不是一个可选的 (String),因此 user.uid 将永远为 nil。它与作为 String? 的电子邮件不同,因此 可能 或不是 nil

关于ios - Swift iOS Firebase - 如果 FirebaseAuth.FIRUser 对象不是 nil,它上面的 .email 怎么可能返回 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49015305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com