AngularFire2 在打字稿中获取经过身份验证的用户 ID

fli*_*ode 5 firebase typescript angularfire firebase-authentication angular

我正在尝试找出如何在 TypeScipt 中获取 Firebase Authenticated 用户的 uid:

<div> {{ (user | async)?.uid }} </div>
Run Code Online (Sandbox Code Playgroud)

我有以下 TS 代码:

import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app'

@Component({
  selector: 'app-user-portal',
  templateUrl: './user-portal.component.html',
  styleUrls: ['./user-portal.component.css']
})
export class UserPortalComponent implements OnInit {
  user: Observable<firebase.User>;

  constructor(
              public afAuth: AngularFireAuth
  ) {
    this.user = afAuth.authState;
  }

  ngOnInit() {

  }
}
Run Code Online (Sandbox Code Playgroud)

我读过的所有内容都表明我需要访问...的 id 属性

this.afAuth.auth.currentUser.uid
Run Code Online (Sandbox Code Playgroud)

......但这似乎没有暴露。如果我把它改成...

this.afAuth.auth.currentUser.toJSON()
Run Code Online (Sandbox Code Playgroud)

...并将其发送到控制台,然后我确实看到了一个 uid 属性。我怎样才能得到那个财产?

这甚至是为用户获取 uid 的正确方法吗?将...

this.afAuth.auth.currentUser.getIdToken()
Run Code Online (Sandbox Code Playgroud)

... 会更好?如果这样更好,我也看不出如何从中获取 uid。建议?

Sup*_*miu 3

您可以从以下位置获取 uididToken Observable

this.afAuth.idToken.subscribe(user => {
            this.user = user;
            this.lists = this.af.list(`/lists/${user.uid}`);
        });
Run Code Online (Sandbox Code Playgroud)

请记住,这是一个可观察的,这意味着您可以使用它作为基础mergeMap,使用map、 等创建一条链。