2017-08-03 180 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)