我正在为我的移动的应用创建身份验证流。我收到错误:“无法在“self.userSession = user”&“.document(.user.uid)”上的范围“”中找到用户“我不确定如何解决此错误。如有任何帮助,将不胜感激!
'
import SwiftUI
import Firebase
import FirebaseCore
import FirebaseAuth
import FirebaseStorage
import FirebaseFirestore
import FirebaseFirestoreSwift
class AuthViewModel: ObservableObject {
@Published var userSession: FirebaseAuth.User?
init() {
self.userSession = Auth.auth().currentUser
print("DEBUG: User session is \(self.userSession?.uid)")
}
func login(withEmail email: String, password: String) {
Auth.auth().signIn(withEmail: email, password: password) { result, error in
if let error = error {
print("DEBUG: Failed to sign in with error \(error.localizedDescription)")
return
}
guard let user = result?.user else { return }
self.userSession = user
print("DEBUG: Did log user in..")
}
}
func register(withEmail email: String, password: String, fullname: String) {
Auth.auth().createUser(withEmail: email, password: password) { result, error in
if let error = error {
print("DEBUG: Failed to register with error \(error.localizedDescription)")
return
}
print("DEBUG: Registered user successfully.")
print("DEBUG: User is \(self.userSession)")
let data = ["email": email,
"fullname": fullname,
"uid": user.uid]
Firestore.firestore().collection("users")
.document(user.uid)
.setData(data) { _ in
print("DEBUG: Did upload user data..")
}
}
}
func signOut() {
// sets user session to nil so we show login view
userSession = nil
// signs user out on server
try? Auth.auth().signOut()
}
}
'
我试过将声明上移到视图模型中,但这导致了另一个错误:“在范围”中找不到结果。
1条答案
按热度按时间xeufq47z1#
你应该使用一个auth状态改变监听器来保存用户会话,就像Firebase文档中提到的那样。你也不应该每次都在每个函数中初始化auth对象。
在register函数中,您尝试访问在login函数中定义的“user”变量。此变量超出了register函数的作用域。您应该使用register函数类中的userSession。