[英]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.