"Cannot find user in scope" SwiftUI Xcode 错误



我正在为我的移动应用程序创建一个认证流。我收到一个错误:"无法在范围内找到用户";在"自我。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()
}
}

我已经尝试将声明向上移动到视图模型上,但这导致了另一个错误:&;无法在作用域&;中找到结果。

您应该使用Firebase文档中提到的身份验证状态更改侦听器来保存用户会话。也不应该在每个函数中每次都初始化auth对象。

import FirebaseAuth
class AuthViewModel: Observable Object {
private let auth: Auth = Auth.auth() // You can also use dependency injection
@Published var userSession: User?
private var authStatusHandler: AuthStateDidChangeListenerHandle?
func addAuthStatusListener() {
if let handle = authStatusHandler {
auth.removeStateDidChangeListener(handle)
}

authStatusHandler = auth.addStateDidChangeListener { _, user in
self.userSession = user
}
}
...
}

在register函数中,您尝试访问"用户"。变量,该变量在登录函数中定义。这个变量超出了寄存器函数的作用域。您应该使用类中的userSession来注册函数。

func register(withEmail email: String, password: String, fullname: String) {
...

let data = ["email": email,
"fullname": fullname,
"uid": userSession.uid] // <- Here

Firestore.firestore().collection("users")
.document(userSession.uid) // <- Here
.setData(data) { _ in
print("DEBUG: Did upload user data..")
}
...
}

最新更新