Angular 通过服务从Firebase获取用户UID

Angular 通过服务从Firebase获取用户UID,angular,firebase,firebase-authentication,rxjs,angularfire2,Angular,Firebase,Firebase Authentication,Rxjs,Angularfire2,原谅我,我对RxJS不太了解 我想知道,如何将用户的UID作为我创建的服务从Firebase中提取出来。并在组件内部实现它 这是密码 文件名:auth.service.ts import { Router } from '@angular/router'; import { Injectable } from '@angular/core'; import * as firebase from 'firebase/app'; import { AngularFireAuth } from 'a

原谅我,我对RxJS不太了解

我想知道,如何将用户的
UID
作为我创建的服务从Firebase中提取出来。并在组件内部实现它

这是密码

文件名:auth.service.ts

import { Router } from '@angular/router';
import { Injectable } from '@angular/core';

import * as firebase from 'firebase/app';
import { AngularFireAuth } from 'angularfire2/auth';
import { AngularFirestore, AngularFirestoreDocument } from 'angularfire2/firestore';

import 'rxjs/add/operator/switchMap';
import { Observable } from 'rxjs/Observable';

declare var $: any;
declare var jQuery: any;

interface User {
    uid: string;
    email: string;
    photoURL?: string;
    displayName?: string;
}

@Injectable()
export class AuthService {

    user: Observable<User>;

    constructor(private afAuth: AngularFireAuth, private afs: AngularFirestore, private router: Router) {
        this.user = this.afAuth.authState.switchMap(user => {
            if (user) {
                return this.afs.doc<User>(`users/${user.uid}`).valueChanges();
            } else {
                return Observable.of(null);
            }
        })
    }

    googleLogin() {
        const provider = new firebase.auth.GoogleAuthProvider();
        return this.oAuthLogin(provider);
    }

    githubLogin() {
        const provider = new firebase.auth.GithubAuthProvider();
        return this.oAuthLogin(provider);
    }

    private oAuthLogin(provider) {
        return this.afAuth.auth.signInWithPopup(provider).then((credential) => {
            this.updateUserData(credential.user)
        }).catch((err) => {
            if (err.code === 'auth/account-exists-with-different-credential') {
                ...
            } else if (err.code === 'auth/internal-error') {
                ...
            } else {
                ...
            }
        })
    }

    private updateUserData(user) {
        const userRef: AngularFirestoreDocument<any> = this.afs.doc(`users/${user.uid}`);

        const data: User = {
            uid: user.uid,
            email: user.email,
            displayName: user.displayName,
            photoURL: user.photoURL
        }

        return userRef.set(data);
    }

    signOut() {
        ...
    }

    deleteUser() {
        ...
    }

}
如果我也能得到所有的属性,那就太好了,会很方便


任何想法和建议都会大有帮助。

下面是我的Auth服务的副本。我有两个属性“currentUserId()”和“currentUserDisplayName()”


下面是我的身份验证服务的副本。我有两个属性“currentUserId()”和“currentUserDisplayName()”


我更喜欢使用行为主题,这是我目前如何设置身份验证服务的

请注意,在用户注册时,我会将用户UID保存回firebase中的用户详细信息中,因此当我提取所有用户数据时,它拥有我需要的一切

我可以使用这个.as.user.uid来获取特定的详细信息。或任何其他

      @Injectable()
      export class AuthService {

        private userSubject: BehaviorSubject<any> = new BehaviorSubject<any>(false);

        constructor(private afAuth: AngularFireAuth) {
          this.afAuth.authState
            .switchMap(user => user ? this.fb.user(user.uid).valueChanges() : Observable.of(false))
            .subscribe(userData => this.userSubject.next(userData));
        }

        get user() {
          return this.userSubject.value;
        }

        get loggedIn() {
          return !!this.userSubject.value;
        }

        userObservable() {
          return this.userSubject.asObservable();
        }

我更喜欢使用行为主题,这是我目前如何设置身份验证服务的

请注意,在用户注册时,我会将用户UID保存回firebase中的用户详细信息中,因此当我提取所有用户数据时,它拥有我需要的一切

我可以使用这个.as.user.uid来获取特定的详细信息。或任何其他

      @Injectable()
      export class AuthService {

        private userSubject: BehaviorSubject<any> = new BehaviorSubject<any>(false);

        constructor(private afAuth: AngularFireAuth) {
          this.afAuth.authState
            .switchMap(user => user ? this.fb.user(user.uid).valueChanges() : Observable.of(false))
            .subscribe(userData => this.userSubject.next(userData));
        }

        get user() {
          return this.userSubject.value;
        }

        get loggedIn() {
          return !!this.userSubject.value;
        }

        userObservable() {
          return this.userSubject.asObservable();
        }
this.authSvc.currentUserId
      @Injectable()
      export class AuthService {

        private userSubject: BehaviorSubject<any> = new BehaviorSubject<any>(false);

        constructor(private afAuth: AngularFireAuth) {
          this.afAuth.authState
            .switchMap(user => user ? this.fb.user(user.uid).valueChanges() : Observable.of(false))
            .subscribe(userData => this.userSubject.next(userData));
        }

        get user() {
          return this.userSubject.value;
        }

        get loggedIn() {
          return !!this.userSubject.value;
        }

        userObservable() {
          return this.userSubject.asObservable();
        }
 this.as.userObservable()
   .filter(res => res)
   .subscribe(res => this.user = res)