来自firebase.User的getIdToken(打字稿中)

时间:2019-01-07 01:32:23

标签: typescript firebase-authentication

import { AngularFireAuth } from 'angularfire2/auth';

import * as firebase from 'firebase/app';

@Injectable()
export class GetRequestsProvider {

  user: firebase.User;
  userIdToken:string;

  constructor(public http: HttpClient, public afAuth: AngularFireAuth, authservices: AuthService) {
      afAuth.authState.subscribe(user => {
        this.user = user;
      });
  }

  getUserToken(){

      this.afAuth.auth.onAuthStateChanged((user) => {

          user.getIdToken().then((idToken)=>{

            this.userIdToken = idToken;
            console.log("Here I get the user token correctly: ", this.userIdToken);
            console.log(typeof(this.userIdToken)); // ‘userIdToken’ type is ‘string’

          });

          console.log("Here the variable ‘userIdToken’ is undefined: ", this.userIdToken);
      }     
   }    
}

我正在尝试使用Firebase中的getIdToken方法来对我的应用程序中的用户进行身份验证。

我现在遇到的问题是,在成功获取用户令牌后,我无法将其保存到变量中或在其他地方使用令牌。

1 个答案:

答案 0 :(得分:1)

返回承诺的函数(例如getIdToken)是异步的,并且整个链的执行立即发生。您的控制台日志总是 在令牌可用之前发生。每当令牌最终可用时,令牌将在传递给then的回调中可用,并且不会很快生效。您只能在此使用它,或将其传递给其他功能使用。

在令牌可用之前,不要沿着试图使getIdToken()同步或阻塞的路线走-这不是它的工作方式。您将需要学习如何异步使用Firebase API。