2017-06-11 19 views
-1

コンポーネント:サービス内の角度2機能が動作していない、一貫

import { Component, OnInit } from '@angular/core'; 
import { AF } from "../angularfire.service"; 

@Component({ 
    selector: 'app-login', 
    templateUrl: './login.component.html', 
    styleUrls: ['./login.component.less'] 
}) 
export class LoginComponent implements OnInit { 

    constructor(private afService: AF) { } 

    ngOnInit() { 
    this.afService.checkUser(); 
    } 

} 

機能:。

checkUser() { 
    var user = firebase.auth().currentUser; 

    if (user) { 
     this.router.navigate(['/dashboard']); 
    } else { 
     console.log("not logged in"); 
    } 
    } 

基本的機能は、彼らがログインしている場合はダッシュボード・ビューにユーザーをリダイレクトそれは時に素晴らしい作品ビュー(app-login)は別のビューを介してアクセスされますが、URLを入力してビューにアクセスする場合、関数はリダイレクトを実行せず、代わりに「ログインしていません」を記録します。

+0

楽しみますこの解決策で動作させるには、非常にハックしているようです: 'setTimeout()=> this.afService.checkUser()、300);' –

+0

あなたはfirebase.auth checkUserメソッドで実行中 –

答えて

1

まず、firebaseドキュメントにその言及のように:can view it here

注:認証オブジェクトの初期化が完了していないので、CurrentUserにもnullかもしれません。オブザーバーを使用してユーザーのサインイン状態を追跡する場合、このケースを処理する必要はありません。

あなたの問題を説明しているので、あなたのsetTimeoutがそれを解決する理由を説明することもできます。
2番目に、上に書いた構文では、AngularFire2サービス(サービスの説明が不足しているだけ)を使用しないと仮定しています。したがって、よりシンプルな理由でAngularFire2を使用して、 angularfire-databaseと通信します。
私はAngularFire2とフォロー・ソリューションを提案することができます:
コンポーネント:

//basically the same. 

サービス:

import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database'; 
import { AngularFire, AuthProviders, AuthMethods } from 'angularfire2'; 
import 'rxjs/Rx' ; 
import 'rxjs/add/operator/toPromise'; 
import 'rxjs/add/operator/first'; 

constructor(public af: AngularFire){} 
checkUser() { 
    this.af.auth.first().toPromise().then(user => { 
    if (user) { 
    this.router.navigate(['/dashboard']); 
    } else { 
    console.log("not logged in"); 
    } 
    } 
}); 

はちょうどあなたのコードにそれを調整し、私がすることができるよ:)

関連する問題