簡體   English   中英

Angular 4-Firebase-檢查用戶是否已連接

[英]Angular 4 - Firebase - Check if the user is connected

我正在使用Firebase與Google進行身份驗證。 但是問題是當我連接並刷新頁面時,我想獲取Session / CurrentUser。 在文檔中,我必須使用:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    console.log(user)
    // User is signed in.
  } else {
    // No user is signed in.
  }
});

此函數有效,但問題是我不知道tu如何使用可觀察的對象來等待該函數結束。 因為此函數類似於ajax函數,並且angular不等待,所以如果我將用戶設置為局部變量,則它將為null。

我已經在stackoverflow中進行了搜索,但沒有找到解決方案

謝謝

這個My Answer結合@wandrille的解決方案:

您可以像這樣使用Subject代替Observable

import { Subject } from "rxjs/Subject";

class AuthService{
   public connectionSubject : Subject<string>() = new Subject<string>();

   firebase.auth().onAuthStateChanged(function(user) {
     if (user) {
       console.log(user)
       this.connectionSubject.next({ state : "connected", user});
     } else {
       this.connectionSubject.next("disconnected");
     }
   });


}

在您的組件中:

 @Component({
   //... 
  })
  class YourComponent{
      constructor(private authService: AuthService){
      }
      ngOnInit(){
         this.authService.connectionSubject.subscribe((data) => {
            if(data.state === 'connected'){
              console.log(data.user);
            }else{
               //...
            }
         });
      }
  }

我建議您使用angularFire2:

您可以為Auth系統創建服務。

一些例子:

@Injectable()
export class AuthService {

  public firebaseUser : Observable < firebase.User >;
  public currentUser : firebase.User;

  constructor(public afAuth : AngularFireAuth) {

    this.firebaseUser = this.afAuth.authState

  }

  isAuthentificated() {
    return this.firebaseUser
  }

  getCurrentUSer() {
    return this.afAuth.auth.currentUser
  }

  loginUser({email, password}){...some code...}
}

您只需要在組件中調用getCurrentUSer()isAuthentificated()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM