2

当用户登录时,我想将用户数据从我的 Firebase 数据库的“/users/$key”url 获取到 currentUser FirebaseObjectObservable,其中 $key 等于 auth.uid。我也想在用户注销时, currentUser 自动变为 null。

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

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

但我觉得不对。这样做可以吗?

4

1 回答 1

2

这是在视图中显示 uid 的方法。你让它变得很难。无需将此设置为 FireBaseObjectObservable。auth 为你做一切

组件.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;
             });
        }
    }

组件.html

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

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

于 2016-11-10T09:43:36.187 回答