SwiftUI Xcode报错“Cannot find user in scope”的解决求助
Firebase认证流程"Cannot find user in scope"错误修复
你的问题出在register方法的闭包逻辑里:你没有从Firebase返回的result中提取用户实例,就直接使用user.uid,导致编译器找不到user变量。另外注册成功后你也没更新userSession,这会导致后续用户状态不一致。
修复步骤:
- 在
register方法的闭包中,添加获取用户实例的逻辑,和login方法保持一致 - 注册成功后更新
userSession,确保用户状态正确同步
修改后的完整AuthViewModel代码:
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 } // 关键修复:从result中提取用户实例 guard let user = result?.user else { return } // 更新用户会话 self.userSession = user 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() } }
说明:
- 通过
guard let user = result?.user else { return },从Firebase的注册结果中获取到用户对象,直接解决了"Cannot find user in scope"的错误 - 添加
self.userSession = user,确保注册成功后用户状态被正确更新,和登录流程逻辑保持一致,避免后续出现状态异常问题
内容的提问来源于stack exchange,提问作者amelia
相关产品推荐
相关产品推荐

