2017-11-26 1 views
2

私は長い間この問題に悩まされており、私はここに私の問題を掲載することに決めました。Firebaseの複数のアカウントをリンクする

私の問題は、Firebaseのアカウント(FacebookとGoogle)をマージすることです。彼らのどちらかで独立してサインアップするとうまく動作します。

最初にユーザーがGoogleでサインアップし、後でFacebook(Googleと同じ電子メールアドレスを持つ)でそれがスローされ、エラーが発生したとき。私はあなたが私のコードで下記のようにエラーを処理することができたが、私は両方のアカウントをマージする方法を知らない。ここで

は私がこれまでにやっていることです:

facebookSignin: function() { 
    var self = this 
    firebase.auth().signInWithPopup(facebookProvider).then(function(result) { 
     var token = result.credential.accessToken; 
     var user = result.user; 
     self.registerProfile() 
    }).catch(function(error) { 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     console.log("ERROR:" + error) 
     console.log("email is : " + error.email) 

     if (errorCode == 'auth/account-exists-with-different-credential') { 
      firebase.auth().fetchProvidersForEmail(error.email).then(providers => { 
       //providers returns this array -> ["google.com"] 
       console.log("Providers:" + providers) 
       console.log("Credential: " + JSON.stringify(error.credential)) 

       firebase.auth().currentUser.link(error.credential).then(function(user) { 
         console.log("Account linking success", user); 
        }); 
      }).catch(function(error){ 
       console.log("error:" + error) 
      }) 
     } 
     console.log("error code:" + error.code+ "error msg:" + error.message) 
    }); 
  1. まず、私は既にGoogle
  2. サインアップし、今私は、私は電流を取得し、同じメールアドレス とFacebookでログインしたいですユーザーがログインしていないため明らかにユーザーnullです。これはエラーです:error:TypeError: __WEBPACK_IMPORTED_MODULE_1_firebase___default.a.auth(...).currentUser is null

私はマージ部分についてのドキュメントを読んだが、まだこれを理解できなかった。 https://firebase.google.com/docs/auth/web/account-linking#link-federated-auth-provider-credentials-to-a-user-account

私は本当に助けに感謝します。あなたfetchProvidersForEmailと既存のGoogleユーザーを把握した後、あなたはその既存のアカウントに最初にログインする必要があります

答えて

0

:それが完了した後

firebase.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider().setCustomParameters({login_hint: error.email})... 

、あなたがして:

firebase.auth().currentUser.linkWithCredential(error.credential) 

ので、ユーザが最初にFacebookアカウントをリンクする前に既存のアカウントの所有権を確認する必要があります。

関連する問題