我注销后 Firebase 登录不起作用

问题描述 投票:0回答:1

所以第一次登录到 Swift UI 应用程序工作正常。我登录后,视图从登录视图更改为主页视图。但是,在我注销后,登录不会导致我的视图发生变化,所以我认为它不起作用。

这是我的 AuthViewModel,我在其中处理登录和注销。

import FirebaseAuth

class AuthViewModel: ObservableObject {
    static let shared = AuthViewModel()

    private(set) var authSubscription: AuthStateDidChangeListenerHandle?
    @Published var currentUser: User?
    @Published var error: Error?

    init() {
        authSubscription = Auth.auth().addStateDidChangeListener { [weak self] (auth, user) in
            self?.currentUser = user
        }
    }

    func signIn(email: String, password: String) {
        Auth.auth().signIn(withEmail: email, password: password) { [weak self] (authResult, error) in
            if let error = error {
                self?.error = error
            } else {
                self?.error = nil
            }
        }
    }

    func signUp(email: String, password: String) {
        Auth.auth().createUser(withEmail: email, password: password) { [weak self] (authResult, error) in
            if let error = error {
                self?.error = error
            } else {
                self?.error = nil
            }
        }
    }

    func signOut() {
        do {
            try Auth.auth().signOut()
        } catch let error {
            self.error = error
        }
    }
}

这也是我如何从注册视图切换到主视图


struct ContentView: View {
    @State var screenOn = 0
    @EnvironmentObject var authViewModel: AuthViewModel

    var body: some View {
        if let user = authViewModel.currentUser {
            if screenOn == 0 {
                someView(screenOn: $screenOn)
                    .onAppear(perform: UIApplication.shared.addTapGestureRecognizer)
                    .onOpenURL { url in
                        let link = url.absoluteString

                      
                    }
            } else if screenOn == 1 {
                someView(screenOn: $screenOn)
                    .onAppear {
                        authViewModel.signOut()
                    }
            } else if screenOn == 3 {
                someView(screenOn: $screenOn)
            } else if screenOn == 4 {
                someView(screenOn: $screenOn)
            }
        } else {
            Loginpage()
        }
    }
}


swift firebase swiftui firebase-authentication swift3
1个回答
0
投票
The **ScreenOn** variable is not updated correctly after calling the signOut fun.

func signOut() 
{
        do {
            try Auth.auth().signOut()
             self.screenOn = 0  // Add this line 
        } catch let error {
            self.error = error
        }
    }

Add a breakpoint to verify that the correct view is being loaded.

 
© www.soinside.com 2019 - 2024. All rights reserved.