Firebase SwiftUI 和 Firebase Auth - 不读取用户 ID?
Posted
技术标签:
【中文标题】Firebase SwiftUI 和 Firebase Auth - 不读取用户 ID?【英文标题】:Firebase SwiftUI and Firebase Auth - not reading user ID? 【发布时间】:2020-06-08 21:16:37 【问题描述】:下面是我的注册页面的代码。我想这样做,以便当有人在注册页面上创建帐户时,我在用户集合中创建一个文档并将 uuid 包含在文档中。但是, session.session?.uid 最终为零。有谁知道这是为什么?
struct SignUpView: View
@State var email = ""
@State var password = ""
@State var name = ""
@State var error = ""
@EnvironmentObject var session: SessionStore
func signUp()
let db = Firestore.firestore()
let user = db.collection("users").document()
let test = db.collection("users").document(user.documentID).collection("routines").document()
session.signUp(email: email, password: password) (result, error) in
if let error = error
self.error = error.localizedDescription
print("This is the error \(error)")
return
else
self.email = ""
self.password = ""
user.setData(["id": user.documentID, "email": email]) (err) in
if err != nil
print((err?.localizedDescription)!)
return
print(session.session?.uid)
test.setData(["id:": test.documentID, "msg": "samwell Tarly", "uuid": session.session?.uid]) (err) in
print("ummmmm test data?")
if err != nil
print((err?.localizedDescription)!)
return
【问题讨论】:
嗨@David - 请提供更多详细信息/上下文。我们需要知道SessionStore
的样子才能回答您的问题。
【参考方案1】:
Firebase API 是异步的,因为它们通过互联网访问远程系统,这需要一点时间。顺便说一句,这同样适用于访问本地磁盘。这个blog post 更详细地解释了这一点。
因此,session.signUp
是一个异步进程。 IE。对print(session.session?.uid)
的调用在session.signUp
返回之前执行。因此,session.session?.uid
仍然是 nil
。
要解决这个问题,您可以像这样嵌套调用:
session.signUp(email: email, password: password) (result, error) in
if let error = error
self.error = error.localizedDescription
print("This is the error \(error)")
return
else
self.email = ""
self.password = ""
user.setData(["id": user.documentID, "email": email]) (err) in
if err != nil
print((err?.localizedDescription)!)
return
一般来说,我会强烈建议不要在你的视图中执行太多逻辑,而是尽可能让你的视图保持贫乏 - 意思是:将所有逻辑放入视图模型中,并绑定使用组合查看视图模型。这将使您的代码更简洁、更易于测试和可维护。
请参阅https://peterfriese.dev/replicating-reminder-swiftui-firebase-part2/ 了解如何执行此操作。
【讨论】:
谢谢彼得!认为这可能是一个异步问题,但不知道如何解决它。以上是关于Firebase SwiftUI 和 Firebase Auth - 不读取用户 ID?的主要内容,如果未能解决你的问题,请参考以下文章
我该如何解决这个问题:Android Studio - Flutter - Dart - firebase [关闭]
SwiftUI 和 Firebase:当前用户是不是持续存在?