我正在尝试使用angularfire2
获取当前用户。在我的app.component.ts
文件中,我有以下代码
constructor(private afAuth: AngularFireAuth, ) {
this.afAuth.auth.onAuthStateChanged((user) => {
if (!user) {
console.log("not login");
} else {
console.log("login");
}
});
this.initializeApp();
}
现在在我的主页文件中,我试图使用下面的代码
CommonProvide.ts
constructor(private afAuth: AngularFireAuth) {
}
getUid() {
return this.afAuth.auth.currentUser.uid;
}
home.ts
constructor(private cp: CommonProvider) {
console.log(cp.getUid())
}
现在返回undefined uid。然后我注意到ajax调用从firebase获取用户数据。这就是为什么我的构造函数在ajax结束之前被解雇的原因。如果我在延迟一段时间后运行我的主构造函数,我得到了响应。现在我将如何获得usr id?
答案 0 :(得分:1)
试试这个,它将返回一个等待结果的observable。
getUid() {
return this.afAuth.authState.map((auth) => {
if(auth == null) {
return false;
} else {
return auth.uid;
}
});
}
在home.ts你可以订阅它
constructor(private cp: CommonProvider) {
cp.getUid().subscribe(uid=>{
console.log(uid)
})
}
答案 1 :(得分:0)
我通过删除app.component.ts
中的默认根页并在响应来自firebase时设置它来解决此问题。
<强> app.component.ts 强>
rootPage;
constructor(private afAuth: AngularFireAuth, )
{
this.afAuth.auth.onAuthStateChanged((user) => {
if (!user) {
this.rootPage = LoginPage;
} else {
this.rootPage = HomePage;
}
});
this.initializeApp();
}