微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Swift UI中使用Firebase登录?

如何解决如何在Swift UI中使用Firebase登录?

我可以通过代码创建用户并进入下一个视图,但是我无法使用刚才创建的邮件地址和密码登录。另一方面,当我在Firebase身份验证页面上以编程方式创建用户时,可以使用该邮件地址和密码登录。我不知道为什么会这样。

我的登录按钮的代码如下...

Button(action: {
                self.verify()
                
            }) {
                
                Text("Log In")
}

                    
func verify(){
    
    if self.mail != "" && self.pass != ""{
        
        Auth.auth().signIn(withEmail: self.mail,password: self.pass) { (res,err) in
            
            if err != nil{
                
                self.error = err!.localizedDescription
                self.alert.toggle()
                return
            }
            
            print("success")
            UserDefaults.standard.set(true,forKey: "status")
            NotificationCenter.default.post(name: NSNotification.Name("status"),object: nil)
            
        }
    }
    else{
        
        self.error = "Please fill all the contents properly"
        self.alert.toggle()
    }
}

我的注册按钮的代码如下...

Button(action: {
            self.register()
        }) {
            
            Text("Sign Up")
                
        }

func register(){
    
    if self.mail != ""{
        
        if self.pass == self.repass{
            
            Auth.auth().createuser(withEmail: self.mail,err) in
                
                if err != nil{
                    
                    self.error = err!.localizedDescription
                    self.alert.toggle()
                    return
                }
                
                print("success")
                
                UserDefaults.standard.set(true,forKey: "status")
                NotificationCenter.default.post(name: NSNotification.Name("status"),object: nil)
            }
        }
        else{
            
            self.error = "Password mismatch"
            self.alert.toggle()
        }
    }
    else{
        
        self.error = "Please fill all the contents properly"
        self.alert.toggle()
    }
}

解决方法

在if else()中 您需要“返回();”; 和, 您应该以编程方式创建登录活动。 为了更好的结果。

,

要登录Firebase,我建议您在代码中进行一些更新:

  1. 对登录和注册功能使用完成功能,这样您就可以肯定地知道Firebase在回答您。
  2. 处理侦听器AuthStateDidChangeListenerHandle。每当用户的登录状态更改时,都会调用此侦听器。

API身份验证:

    class AuthService {
      static func signInUser(email: String,password: String,onSucces: @escaping() -> Void,onError: @escaping (_ errorMessage : String) -> Void ) {
         Auth.auth().signIn(withEmail: email,password: password) { (authData,error) in 
            if (error != nil) {
               print(error!.localizedDescription)
               onError(error!.localizedDescription)
               return
             }   
             //Sign In Code
             onSuccess()
       }

       static func signUpUser(email: String,username: String,onError: @escaping (_ errorMessage : String) -> Void ) {
    
      Auth.auth().createUser(withEmail: email,error) in
        if (error != nil) {
            print(error!.localizedDescription)
            onError(error!.localizedDescription)
            return
        }
        //Sign Up Code
        onSuccess()  
         
    }
}

  }

在您的View或ViewModel中:

    func verify() {
    
       if self.mail != "" && self.pass != ""{
           AuthService.signUpUser(email: email,password: password,username: username,onSucces: {
               print("Sign In!")
           }) { (error) in {
               print("Error \(error)")
           })
    }
}

Class Session,用于处理Auth Listener

    class SessionAuth : ObservableObject {
       @Published var isLoggedIn = true
       var handle : AuthStateDidChangeListenerHandle?
        
         func listenAuthentificationState() {
         
              handle = Auth.auth().addStateDidChangeListener({ (auth,user) in
                 if let user = user {
                     //You are log in 
                     // Your login process code
                     self.isLoggedIn = true
                 }
                 else {
                      //You are not 
                      self.isLoggedIn = false
                 }    
         }  
    }

您的主视图:

    struct ContentView: View {

       @ObservedObject var session : SessionAuth //or EnvironmentObject

       func listen() {
           session.listenAuthentificationState()
       }

       var body: some View {
   
          Group {
            if session.isLoggedIn {
                MainLoggedView()
            }
            else {
                SignInView()
            }
          }.onAppear(perform: listen)
       }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。