How do I get the current user's access token in AngularFire2?

后端 未结 7 2179
星月不相逢
星月不相逢 2021-02-08 11:10

In AngularFire you were able to access the providers (e.g Google) accessToken for the authenticated user.

There does not seem to be a way to access this with AngularFire

相关标签:
7条回答
  • 2021-02-08 11:24

    googleSignIn() {
    
        return this.af_auth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider())
          .then(res => {
    
            // retrieve access token 
            const AccessToken = res.credential['accessToken'];
            console.log("Access token: ", AccessToken);
    
    
          })
          .catch(error => {
            console.log(error.message);
          });

    0 讨论(0)
  • 2021-02-08 11:25

    getToken is deprecated now. You should use getIdToken instead:

    this.af.auth.currentUser.getIdToken(true)
      .then((token) => localStorage.setItem('tokenId', token));
    
    0 讨论(0)
  • 2021-02-08 11:27

    The access token is only accessible when the user first signs in. From the Firebase migration guide for web developers:

    With the Firebase.com Authentication API, you can easily use the provider's access token to call out to the provider's API and get additional information. This access token is still available, but only immediately after the sign-in action has completed.

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

    So it is indeed not available on a page refresh. If you want it to remain available, you will need to persist it yourself.

    0 讨论(0)
  • 2021-02-08 11:27

    Getting the auth token from storage in angularfire2

    JSON.parse(JSON.stringify(this.afAuth.auth.currentUser)).stsTokenManager.accessToken
    

    As seen in this discussion: https://github.com/angular/angularfire2/issues/725

    0 讨论(0)
  • 2021-02-08 11:29

    This works for me:

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

    You can put it into a Service and then you can get the token like this:

    this.authService.getToken().then(
      (token) => console.debug(`******** Token: ${token}`));
    
    0 讨论(0)
  • 2021-02-08 11:38

    With AngularFire2, you can get the token like this :

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

    If you want to get an ES6 Promise instead, just use

    Promise.resolve()
      .then(() => this.af.auth.getToken() as Promise<string>)
    
    0 讨论(0)
提交回复
热议问题