Ionic 3 - Firebase当前用户为空

时间:2018-01-23 06:32:58

标签: firebase firebase-authentication ionic3 angularfire2

我正在尝试使用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?

2 个答案:

答案 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();
 }