You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI Xcode报错“Cannot find user in scope”的解决求助

Firebase认证流程"Cannot find user in scope"错误修复

你的问题出在register方法的闭包逻辑里:你没有从Firebase返回的result中提取用户实例,就直接使用user.uid,导致编译器找不到user变量。另外注册成功后你也没更新userSession,这会导致后续用户状态不一致。

修复步骤:

  1. 在register方法的闭包中,添加获取用户实例的逻辑,和login方法保持一致
  2. 注册成功后更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:45:55