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方法来对我的应用程序中的用户进行身份验证。
我现在遇到的问题是,在成功获取用户令牌后,我无法将其保存到变量中或在其他地方使用令牌。
答案 0 :(得分:1)
返回承诺的函数(例如getIdToken
)是异步的,并且整个链的执行立即发生。您的控制台日志总是 在令牌可用之前发生。每当令牌最终可用时,令牌将在传递给then
的回调中可用,并且不会很快生效。您只能在此使用它,或将其传递给其他功能使用。
在令牌可用之前,不要沿着试图使getIdToken()
同步或阻塞的路线走-这不是它的工作方式。您将需要学习如何异步使用Firebase API。