如何解决如何在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,我建议您在代码中进行一些更新:
- 对登录和注册功能使用完成功能,这样您就可以肯定地知道Firebase在回答您。
- 处理侦听器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 举报,一经查实,本站将立刻删除。