2017-10-11 30 views
0

我正在使用Firebase进行Google身份验证。但问题是当我连接并刷新页面时,我想获取Session/CurrentUser。 在文档我必须使用:Angular 4 - Firebase - 检查用户是否已连接

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

此功能,但问题是我不知道TU如何使用可观察等待这个函数的结尾。因为这个函数类似于ajax函数,并且角度不会等待,所以如果我将用户设置为局部变量,它将为空。

我已经搜查计算器,我没有找到一个解决方案

谢谢

+0

您可以使用firebase.auth()。currentUser查看它是否已经连接到初学者。如果你想使用onAuthStateChanged,你想在事后发生什么?你不能把其余的if(用户)块? – Carsten

+2

看看angularfire2 –

回答

2

这我的回答与@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{ 
       //... 
      } 
     }); 
     } 
    } 
+0

在你的例子中,变量用户将会使用户满意。但是我怎么能在我的控制器中返回这个用户?我想控制用户是否连接,如果不是,我想限制他一些路线 – Fasco

+0

@Fasco查看更新 –

2

我建议你使用angularFire2:

您可以为您的验证SYSTEME的服务。

一些例子:

@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()在你的组件。

+0

我使用angularFire2。你的方法正在工作,但问题是我想检查currentUser是否不在控制器中。但是,如果我在控制器中执行此操作,则curent用户始终为空 – Fasco