2016-10-21 57 views
1

我是Firebase和iOS的新手,我想知道是否有人知道如何鏈接多個oAuth提供程序。我跟着火力地堡文檔,並試圖實現這個功能:在Firebase中鏈接oAuth提供程序iOS

func firebaseSignInWithLink(credential: FIRAuthCredential) { 

     FIRAuth.auth()?.signIn(with: credential, completion: { (user, error) in 
      if error != nil { 
       debugPrint("APP: there has been an error signing into firebase, perhaps another account with same email") 
       debugPrint("APP: \(error)") 

       // if existing email, try linking 
       FIRAuth.auth()?.currentUser?.link(with: credential, completion: { (user, error) in 
        if error != nil { 
         debugPrint("APP: there has been an error signing into firebase") 
         debugPrint("APP: \(error)") 
        } 
        else { 
         debugPrint("APP: successfully signed into firebase") 
        } 
       }) 
      } 
      else { 
       debugPrint("APP: successfully signed into firebase") 
      } 
     }) 
    } 

FIRAuth.auth()?.currentUser?.link功能不會被調用,儘管上述debugPrint("APP: \(error)")被調用。因爲這不工作,我不斷收到以下錯誤:「該電子郵件地址已在使用由另一個帳戶\」

可選(錯誤域= FIRAuthErrorDomain代碼= 17007 \的UserInfo = {NSLocalizedDescription =該電子郵件地址已被其他帳戶,ERROR_NAME = ERROR_EMAIL_ALREADY_IN_USE,[email protected]})」

任何幫助將不勝感激謝謝:!d

+0

我正在解決同樣的問題。我還沒有掌握它,但如果你已經有「currentUser」(我很確定你這樣做),你不應該呼叫登錄,因爲該用戶的電子郵件已經與先前登錄的不同IDP相關聯。 ..我們看到的錯誤... – Dewey

+0

我覺得讓我感到困惑的是如果用戶無法通過產生錯誤的oAuth登錄,我們如何獲取currentUser對象。用戶是否必須嘗試所有可能的auth方法,直到他/她成功登錄並獲取currentUser對象,然後再次登錄到oAuth以將其鏈接? :/ – Clement

回答

2

我相信你是困惑的指示。在firebase文檔它讀取

0在使用任何認證提供者或方法的用戶

  1. 星座:

    要連結AUTH提供商憑證到現有用戶帳戶。

  2. 完成直至但不包括調用FIRAuth.signInWith方法之一的新身份驗證提供程序的登錄流程。例如,獲取用戶的Google ID令牌,Facebook訪問令牌或電子郵件和密碼。

  3. 找一個FIRAuthCredential爲新的身份驗證提供

所以,你不應該調用該方法FIRAuth.signInWith。我還應該指出,你想創建一個鏈接到一個現有的帳戶,所以你應該先登錄,然後你可以鏈接它。這就是爲什麼你應該有一個最新的用戶。

0

這是因爲從Firebase控制檯取消選中「設置每個電子郵件地址的多個帳戶設置Firebase設置」。

+0

這將在auth中設置一個新的UID,儘管...所以多個帳戶將存在,而不只是一個帳戶與多個提供者。如果您需要使用來自多個提供商的單個用戶的唯一UID進行持久性存儲,這可能會導致問題 – MattTanner