如何在AngularFire2中登录用户(auth不为null)时获取对象?

时间:2016-08-04 09:54:10

标签: typescript angular observable angularfire2

我想将用户数据传输到currentUser FirebaseObjectObservable,来自我的Firebase数据库的'/ users / $ key'网址,其中$ key等于auth.uid,当用户登录时。我也喜欢什么时候用户注销,currentUser自动变为空。

为此,我想我需要在模板中使用异步管道,但我只能在登录后获取currentUser数据,并在注销后保留在内存中(我已经完成了它)。我希望当auth对象变为null时它会自动变为空。

import { Component } from '@angular/core';
import { AngularFire, FirebaseObjectObservable } from 'angularfire2';
@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent {
  currentUser : FirebaseObjectObservable<any>;

    constructor(public af: AngularFire) {

     this.af.auth.subscribe(auth => {
       console.log(auth);
       this.currentUser = af.database.object('/users/' + auth.uid);
      });
    }

 }

我可以在我的模板{{(currentUser | async)?.email}}

中使用这样的内容

我对Observables的认识不足是问题,但是AngularFire auth对象与我理解的rxjs / Observable不同。

更新

这就是我解决它的方法:

constructor(public af: AngularFire) {
 this.af.auth.subscribe(auth => {
   console.log(auth);
   if(auth)
   this.currentUser = af.database.object('/users/' + auth.uid);
   else
    this.currentUser = new FirebaseObjectObservable<any>();
  });
}

然而我感觉不对。这样做可以吗?

1 个答案:

答案 0 :(得分:2)

以下是如何在视图中显示您的uid的方法。你正在努力。没有必要将这个作为FireBaseObjectObservable。 auth为你做了一切

<强> component.ts

    export class DashboardComponent {

          email:any;
          userid: string;
          constructor(public af: AngularFire) {
            this.af.auth.subscribe(auth => {
              console.log(auth.uid);
              this.userid = auth.uid;
              this.email = af.auth.getAuth().auth.email;
             });
        }
    }

<强> component.html

<h1>{{ userid}}</h1>
<h1>{{email}}</h1>

这是您应该从用户那里获取所有数据的方式