3

我正在使用AngularFire2作为应用程序,并且我已经获得了使用Firebase的注册/登录功能,但是,每次刷新页面时,登录状态为重置并不会持续。我不能完全找到这样做的功能,但我觉得我错过了一些非常小的东西。AngularFire2 - 如何在页面刷新后保持登录状态

我可以使用AngularFireAuth检查页面加载的地方吗?

这里是我的身份验证提供者的代码:

import { Injectable } from '@angular/core'; 
import {Observable, Subject, BehaviorSubject} from "rxjs/Rx"; 
import {AngularFireAuth, FirebaseAuthState} from "angularfire2"; 
import {AuthInfo} from "./auth-info"; 
import {Router} from "@angular/router"; 

@Injectable() 
export class AuthService { 


    static UNKNOWN_USER = new AuthInfo(null); 

    authInfo$: BehaviorSubject<AuthInfo> = new BehaviorSubject<AuthInfo>(AuthService.UNKNOWN_USER); 


    constructor(private auth: AngularFireAuth, private router:Router) { 

    } 

    login(email, password):Observable<FirebaseAuthState> { 
     return this.fromFirebaseAuthPromise(this.auth.login({email, password})); 
    } 


    signUp(email, password) { 
     return this.fromFirebaseAuthPromise(this.auth.createUser({email, password})); 
    } 


    fromFirebaseAuthPromise(promise):Observable<any> { 

     const subject = new Subject<any>(); 

     promise 
      .then(res => { 
        const authInfo = new AuthInfo(this.auth.getAuth().uid); 
        this.authInfo$.next(authInfo); 
        subject.next(res); 
        subject.complete(); 
       }, 
       err => { 
        this.authInfo$.error(err); 
        subject.error(err); 
        subject.complete(); 
       }); 

     return subject.asObservable(); 
    } 


    logout() { 
     this.auth.logout(); 
     this.authInfo$.next(AuthService.UNKNOWN_USER); 
     this.router.navigate(['/login']); 

    } 

} 

三江源提前!

回答

3

AngularFireAuth是一个可观测值并发出FirebaseAuthState值。如果用户已登录且页面已刷新,则AngularFireAuth将发出已验证的FirebaseAuthState;否则,它会发出null

所以这样的事情应该接近解决您的问题:

constructor(private auth: AngularFireAuth, private router:Router) { 

    auth.subscribe((authState) => { 
    if (authState) { 
     const authInfo = new AuthInfo(authState.uid); 
     this.authInfo$.next(authInfo); 
    } 
    }); 
} 
+0

cartant,这可能是你帮助过我的第5次。有一天我会找到你......我会抱抱你。谢谢你这么做了。你是最棒的! –

相关问题