Angular 通过服务从Firebase获取用户UID
原谅我,我对RxJS不太了解 我想知道,如何将用户的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
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)