Google cloud firestore 如何创建用户';注册Firestore/SwiftUI时的个人资料信息文档?
快速编辑:用户完全可以被授权,只是不需要创建文档 我觉得这太复杂了。我试着到处搜索,但我没能找到一个不强迫我重新构建应用程序的解决方案。除此之外,其他一切都正常工作,我觉得我只需要将对Google cloud firestore 如何创建用户';注册Firestore/SwiftUI时的个人资料信息文档?,google-cloud-firestore,swiftui,Google Cloud Firestore,Swiftui,快速编辑:用户完全可以被授权,只是不需要创建文档 我觉得这太复杂了。我试着到处搜索,但我没能找到一个不强迫我重新构建应用程序的解决方案。除此之外,其他一切都正常工作,我觉得我只需要将对createUserDoc函数的调用放在正确的位置,但我不知道在哪里。这就是我现在拥有的。我试着尽可能多地撇去填充物。注册表格是您的通用文本字段VStack,因此我认为不需要它 struct User: Codable, Identifiable { var id: String var email
createUserDoc
函数的调用放在正确的位置,但我不知道在哪里。这就是我现在拥有的。我试着尽可能多地撇去填充物。注册表格是您的通用文本字段VStack,因此我认为不需要它
struct User: Codable, Identifiable {
var id: String
var email: String
var firstName: String = ""
var lastName: String = ""
}
class SessionStore: ObservableObject {
private let db = Firestore.firestore()
@Published var session: User?
var handle: AuthStateDidChangeListenerHandle?
let authRef = Auth.auth()
func listen() {
handle = authRef.addStateDidChangeListener({ auth, user in
if let user = user {
self.session = User(id: user.uid, email: user.email!)
} else {
self.session = nil
}
})
}
// ...
func signUp(firstName: String, lastName: String, email: String, password: String) {
authRef.createUser(withEmail: email, password: password) { result, error in
guard error != nil else { return }
guard let user = result?.user else { return }
// This is what I don't know where to put
self.db.collection("Users").document(user.uid).setData([
"firstName": firstName,
"lastName": lastName,
"email": email,
"id": user.uid
// I've also tried using the createUserDoc function
let newUser = User(id: user.uid, email: email, firstName: firstName, lastName: lastName)
self.createUserDoc(newUser: newUser)
])
}
}
// ...
func createUserDoc(newUser: User) {
let _ = db.collection("Users").document(newUser.id).setData([
"firstName": newUser.firstName,
"lastName": newUser.lastName,
"email": newUser.email,
"id": newUser.id
])
}
}
基于搜索,我想我知道哪里出了问题,我只是不知道该怎么办。我认为在执行createUserDoc
之前必须完成signUp
函数。但是我首先需要引用该用户的uid来创建文档。我有点(勉强)想到了一个快速解决方案,通过创建一个一次性类,只用于创建一个文档,但这感觉是错误的和冗余的,而且我不得不引入一堆毫无意义的一次性变量和额外的代码
理想情况下,注册和创建文档应该在一个功能中完成,对吗?我该怎么做呢?如果可能的话,我真的希望能提出一个最小化重组的建议。一周来,我经历了足够多的重组,终于有了一些可以理解的东西。多亏了@jnpdx,我才得以修复。原来我必须更改
保护错误!=如果let error=error
,则返回到的nil
语句。我不知道为什么会这样,以前也没有,但让这句话提醒所有新手:每隔一段时间构建和测试一次,即使你的笔记本电脑在构建过程中处于爆炸的边缘。你确定没有出错吗?您只是返回,没有在guard
语句中打印错误或任何内容。@jnpdx这是一个好问题,在多次重新启动之后,我并不太关心如何实现错误处理。你会发现的soon@jnpdx事实证明,它被警卫的错误陈述缠住了。我把它改为if let error=error,一切都按预期进行了。之前无法说明问题是什么,但无论如何,感谢您提醒我要更频繁地构建和测试,从现在起,我们将做得更多。哦,是的——更仔细地看,您有guard let error!=nil
应该是相反的:guard error==nil
噢,天啊,我的Python背景很难适应Swift,谢谢