2017-05-15 10 views
1

「reauthenticateWithPopup」を使用して簡単に再認証するために、ログインしているユーザのAuthProviderを検出しようとしています。ファイアベースで現在のユーザのAuthProviderを取得する

最も簡単な方法は、現在のユーザーから対応するAuthProviderオブジェクトを直接取得することですが、これは不可能です(私が間違っている場合は修正してください)。

もう1つのオプションは、firebase.auth.currenUser.providerIdを取得し、switch/case節を実行してfirebase.auth.AuthProviderを作成することです。文字列(例:「google.com」)の上にスイッチ/ケースを置かなければならないので、私は個人的にこのオプションが大好きです。しかし、これは私が考えることができる最高の解決策でした。

残念ながら、私が実装していたときに、私がGoogleからログインした場合でも電子メール/パスワードを使っていても、firebase.auth.currenUser.providerIdは常に「firebase」を返すことに気付きました。これはバグですか?私は何か間違っているのですか?

currentUser.providerDataにアクセスすると、このユーザーに使用可能なすべてのプロバイダが含まれていることがわかります。しかし、これはリストであり、このユーザーに複数のユーザーが存在する場合に、現在使用されているものを選択するかどうかはわかりません。

追加情報:

+0

currentUser.providerDataの各プロバイダはproviderIdを有する:。firebase.auth()currentUser.providerData [0] .providerId。これを使用して、ユーザーを再認証することができます。また、現在のユーザーのために再認証するためのすべてのオプションを提供し、ユーザーがどちらを使用するかを決定させることもできます。 – bojeil

+0

はい、それは私がやったと思ったことです。しかし、私はこの時間を認証するために使用されたものを知る直接的な方法があるのだろうかと思っていました。ユーザーが複数の認証方法(たとえば、アカウントがGoogle、Facebookなどでリンクされているなど)を持っている場合は、現在のアカウントを取得する方法が必要です。 – Escapecracker

答えて

0

最も簡単な方法は、providerDataリストを反復することです。いくつかのJWTパーサーを使用してFirebase IDトークンを解析し、firebase.sign_in_providerフィールドを確認することもできます。これは、IDトークンを取得するために使用される認証方法を含むであろう:

{ 
"iss": "https://securetoken.google.com/PROJECT_ID", 
"aud": "PROJECT_ID", 
"auth_time": 1495126200, 
"user_id": "1234567890", 
"sub": "1234567890", 
"iat": 1495126200, 
"exp": 1495129800, 
"email": "[email protected]", 
"email_verified": true, 
"firebase": { 
    "identities": { 
    "google.com": [ 
     "0987654321" 
    ], 
    "email": [ 
     "[email protected]" 
    ] 
    }, 
    "sign_in_provider": "google.com" 
} 
} 
+0

私は、anglefire2の中に組み込まれている機能はないと思いますか?これは素晴らしい機能のように見えます。 – Escapecracker

0

これは、Webアプリケーション用で使ってangularfire2 v4の?ストレートドキュメントから

firebase.auth().onAuthStateChanged(function(user) { 
    if (user) { 
    // User is signed in. 
    } else { 
    // No user is signed in. 
    } 
}); 

https://firebase.google.com/docs/auth/web/manage-users

、ユーザーが現在のユーザーのLOGGEDINを取得するには/ログイン

0

を登録するにはリダイレクトしない場合は、コードを実行しようと署名した場合、スクリプトでこれをチェックこの

import { 
     AngularFire, 
     AngularFireAuth 
    } from 'angularfire2'; 

    constructor(public af: AngularFire) { 
     this.af.auth.subscribe(auth => { 
     console.log(auth) 
     }); 
    } 
関連する問題