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 시간입니다. 언젠가 너를 찾을거야 .... 너를 안아 줄거야. 너무 많이 트릭을 했어. 너는 최고야! –

관련 문제