2017-08-03 144 views
0

我有以下代码以注册用户火力......注册用户火力并登录,如果已经注册

FIRAuth.auth()?.createUserWithEmail(email.text!, password: password.text!) {(user, error) in 
      if let error = error { 
       print(error.localizedDescription) 
       if error.localizedDescription == "FIRAuthErrorCodeEmailAlreadyInUse" 
       { 
        //sign in here? 
       } 

      } 
      else { 
       print("User signed in!") 
      } 
     } } 
    else{ 
     print("You left email/password empty") 
    } 

我会添加到这个如果用户已经因此它会自动登入产生的?

谢谢。

回答

0

您可以使用任何Firebase提供的身份验证方法。例如。你的情况,这一个是最合适的:

Auth.auth().signIn(withEmail: email, password: password) { (user, error) in 
    // ... 
} 

Source

编辑

从你贴会告诉你,如果给定的用户已经存在的注册方法的错误响应。在这种情况下,您可以在回调中自动调用signIn方法。

看看official docs,我看到您应该查找的错误代码是FIRAuthErrorCodeEmailAlreadyInUse。

+0

了解错误代码,我该如何检查特定的错误代码并对其作出反应? – Goomba

+0

@Goomba我正在谈论你发布的注册方法的回调。只要来自后端的响应触发了您的代码,就可以访问错误对象。这是您何时会检查错误变量是否包含任何有趣的内容。 –

+0

好的,但我将如何检查错误,这是一个字符串?像我检查“FIRAuthErrorCodeEmailAlreadyInUse”?我认为它会在第一个if语句中打印错误以检查那里...... – Goomba

0

您可以检查是否currentUsernil事先:

if Auth.auth().currentUser != nil { 
    // User is signed in. 
    // ... 
} else { 
    // No user is signed in. 
    // ... 
} 

从火力地堡文档:

您还可以获取当前使用currentUser财产登录的用户。如果用户没有登录,currentUser是零:

+0

更正确的答案似乎来自ØyvindHauge,但我不知道如何检查他指出的错误代码。谢谢你! – Goomba

+0

如果用户在某个时间出于某种原因已被注销(在这种情况下,当前用户将为零),这将不起作用 –

+0

因此,显示登录屏幕。我没有强迫网络电话来检查用户是否已登录。官方文档使用相同的检查:https://firebase.google.com/docs/auth/ios/manage-users –

0

这样做的另一种方法是使用fetchProvidersForEmail:完成:https://firebase.google.com/docs/reference/ios/firebaseauth/api/reference/Classes/FIRAuth#-fetchprovidersforemailcompletion检查电子邮件第一存在。

这将返回与该电子邮件关联的提供者ID列表。如果您在列表中收到“密码”,则该电子邮件已存在电子邮件/密码帐户,您可以致电signIn(withEmail: email, password: password)。否则,您致电createUserWithEmail(email, password: password)