8

私がやってsucessfullyすることができませんFirebaseドキュメント上の指示に従って、私は、次の手順に従っ:既存の認証プロバイダー(私の場合:Facebookの)を使用して、使用中の署名複数の認証プロバイダをFirebaseアカウントにリンクする方法

  1. サインインフローに新しい認証プロバイダーアップのためを完了しますが、Auth.signInWithの方法のいずれかを呼び出して、含めない(私の場合:私は、電子メール&パスワードとGoogleのOAuthをリンクさせたいです)。だからこれは私が不明なステップです、私はvar provider = new firebase.auth.GoogleAuthProvider();を使用して新しいプロバイダを作成し、私はFirebase.auth().signInWithPopup(provider)をしませんでした。その後、Googleにとってauthcredential取得する
  2. 私は、このエラーは第二のステップは
  3. (サインインしていない)と述べ私はGoogleのOAuthの使用に署名していないため、適切なようだが、thatsの(私は未定義のgoogleUserエラーを取得)var credential = firebase.auth.GoogleAuthProvider.credential( googleUser.getAuthResponse().id_token);を実行しますFacebookのプロバイダにいる現在のユーザーとリンクするこのコマンドを実行します。auth.currentUser.link(credential)

私の理解では、現在のユーザーは既存のプロバイダ(Facebook)にリンクする必要があります。 googleの資格情報変数は決して計算されないようです。機能的なコード例を持っている人は、本当に助けになります。

答えて

8

Googleと電子メール/パスのアカウントを既存のFacebookベースのFirebaseユーザーに手動でリンクさせる場合は、次の操作を実行できます。 まず、ユーザーはFacebookにサインインする必要があります。 リンクGoogleユーザー:

var provider = new firebase.auth.GoogleAuthProvider(); 
auth.currentUser.linkWithPopup(provider); 

次にアカウントを渡す/電子メールのリンク:

auth.currentUser.linkWithCredential(firebase.auth.EmailAuthProvider.credential(auth.currentUser.email, 'password')) 

リンクされるすべてのこれらのアカウントは、新しいもの、すでにリンクされていない必要があります。

+0

手動で説明しましたが、プロバイダを自動的にリンクする別の方法がありますか? – jasan

+1

正確ではありません。私はそれをうまく説明していないと思う。私は手動で開発者がいくつかの必要性(Googleのカレンダーにアクセスするには、Googleのプロバイダを必要とする匿名ユーザーをアップグレードするなど)に基づいてリンクを選択するように意味。もう1つのケースは、バックエンドサーバーがセキュリティ上の理由からバックエンドサーバーに必要な場合です。たとえば、[email protected]を返すgoogleを使用してfirebaseに署名します。その後、ユーザーは同じ電子メール[email protected]を返すfacebookを使用して別のデバイスにサインインします。その場合、信任状がすでに使用されているというエラーがスローされます。その場合は、両方のプロバイダをリンクするためにアカウントをリンクする必要があります。 – bojeil

+0

@bojeil私はあなたが 'linkWithPopup()'を使ったことを知ります。次に、[Firebaseチュートリアル](https://firebase.google.com/docs/auth/android/account-linking#link-auth-provider-credentials-to-a-user)に記載されている 'linkWithCredential()'とは何ですか? -アカウント)? –

関連する問題