6

AngularFireでは、認証されたユーザーのプロバイダ(たとえば、Google)のaccessTokenにアクセスできました。AngularFire2で現在のユーザーのアクセストークンを取得するにはどうすればよいですか?

AngularFire2でこれにアクセスする方法はありませんか?最初のログインで

は次のように言う:

this.af.auth.subscribe(user=> { 
    if (user) { 
    console.log(user.google); 
    } 
}); 

それがその後のdisplayNameなどの標準的な詳細(UIDを、ログアウトします(ページの更新に)、idToken、accessToken、プロバイダをログアウト しかします...) accessTokenはアクセス可能なプロパティではありませんか?

現在のユーザーにアクセスする方法はありますか?

答えて

0

アクセストークンは、ときにユーザー最初の兆候でのみアクセス可能ですFirebase migration guide for web developersから:。

Firebase.com認証APIを使用すると、簡単にプロバイダのAPIを呼び出すために、プロバイダのアクセストークンを使用することができます追加情報を入手してください。このアクセストークンは引き続き使用できますが、サインインアクションが完了した直後に限ります。

var auth = firebase.auth(); 

var provider = new firebase.auth.GoogleAuthProvider(); 
auth.signInWithPopup(provider).then(function(result) { 
    var accessToken = result.credential.accessToken; 
}); 

だから、それは確かにページの更新では使用できません。あなたがそれを利用可能にしておきたい場合は、あなた自身でそれを維持する必要があります。 AngularFire2で

+2

これはAngularFire2ライブラリではうまくいきません。 – Intellidroid

+1

ええ、私もそれを取得しません。 'login()'は 'signInWithPopup()'とは異なるデータで解決されるようです。 –

+1

最後に、Firebase SDKを使用してトークンを取得し、それをlocalStorageに永続させます。 AngularFire2をすぐに初期化しなくてはならないことがわかりました(現在のユーザーがまだFirebaseの認証期間内にある場合)。その後、この(AngularFire2)を遅れてロードします。 – Intellidroid

0

、あなたはこのようにトークンを取得することができます:あなたの代わりにES6約束を取得したい場合は、単にこれが私の作品

Promise.resolve() 
    .then(() => this.af.auth.getToken() as Promise<string>) 
1

を使用し、

this.af.auth.getToken() // returns a firebase.Promise<any> 

this.af.auth.getAuth().auth.getToken(false);//true if you want to force token refresh 

サービスに入れることができますし、このようなトークンを得ることができます:

this.authService.getToken().then(
    (token) => console.debug(`******** Token: ${token}`)); 
+0

これはgetAuth()の問題です.Firebase 3のサポートを追加してからgetAuth()APIの動作が変更されました。 これは、ユーザーが実際にログされても、ページが読み込まれると初期値としてnullを返しますin。 authStateを非同期的に確認するには、authサービスaf.auth.subscribe()にサブスクライブします。 getAuthメソッドは将来のリリースで削除されます – Intellidroid

+0

私はドキュメントがこれを言っていることを知っていますが、私の解決策はうまくいきます。唯一の問題は、あなたが言ったようにこれが将来的には機能するだろうという警告の言葉ですが、その瞬間に別の新しい方法や代替の解決法が存在するため、心配しないでください。 –

0

getTokenは廃止されました。

this.af.auth.currentUser.getIdToken(true) 
    .then((token) => localStorage.setItem('tokenId', token)); 
関連する問題