0

私のアプリで私は認証サービスを設定しています。かなりシンプルな動作。Angularfire2プロパティ 'then'が 'void'型に存在しません

appComponentには、Googleを通じてログインするための簡単なボタンがイベント(click)='login'に含まれています。私が受け入れた後、私はユーザを/accountにリダイレクトしたいと思う。

アプリは、私がng serveにエラーが発生したしかしを期待通りに動作します:

[デフォルト] C:\プロジェクト\ SRC \アプリ\ app.component.ts:24:8

Property 'then' does not exist on type 'void'. 

[デフォルト] C:\プロジェクト\ SRC \アプリ\サービス\ auth.service.ts:28:22

これらのエラーがあるため、非ブロッキングのように見えますアプリが正常に動作するようです。 あなたはそれらを解決する方法を知っていますか?

私はこの問題は、私は約束を返すangularfireの認証ログインメソッドで返さ_auth.login()結果に、次に適用されるため、表示されているようだ...しかし、私はどのように私ができるかわからないを推測それが本当に問題であれば、私のコードをリファクタリングしてサービスを正しく呼び出すことができます。私は(私が間違っていれば私を修正する)それはサービス自体からリダイレクトを呼び出すことは悪い考えだと思います。

ここに私のファイルがあります。

app.component.ts:

constructor(private router: Router, private _auth: AuthService) { 
    this.date = new Date(); 
} 

login() { 
    this._auth.login() 
    .then(() => { 
     this.router.navigate(['/account']); 
    }); 
} 

logout() { 
    this._auth.logout() 
    .then(() => { 
     this.router.navigate(['/login']); 
    }); 
} 

私のAuthService:あなたは適切にAFを使用してのAuthServiceのいずれかの例を

import { Injectable } from '@angular/core'; 
import { AngularFire, AuthProviders } from 'angularfire2'; 
@Injectable() 
export class AuthService { 
    user = {}; 
    isAuthenticated: boolean = false; 

    constructor(public af: AngularFire) { 
     this.af.auth.subscribe(user => { 
     if (user && !user.auth.isAnonymous) { 
      this.user = user; 
      this.isAuthenticated = true; 
      console.log('User Logged in', user, this.getUserEmail()); 
     } else { 
      this.user = {}; 
      this.isAuthenticated = false; 
      console.log('User Not Authenticated', user); 
     } 
     }); 
    } 

    getUser() { 
     return this.user; 
    } 

    getUserEmail() { 
     return this.user.auth.email; 
    } 

    login() { 
     return this.af.auth.login({ 
     provider: AuthProviders.Google 
     }); 
    } 

    logout() { 
     return this.af.auth.logout(); 
    } 
} 

を持っていますか?

答えて

1

AngularFire2のlogout方法doesn't return a Promise

public logout(): void { 
    this._authBackend.unauth(); 
} 

logoutリターンの約束を持っているunmerged PRがあり、現時点では、それはしません。

あなたがにあなたのapp.component.tsコードを変更することができ、次のいずれか

logout() { 
    this._auth.logout(); 
    this.router.navigate(['/login']); 
} 

それとも、あなたのAuthServiceに変更することができます:

logout() { 
    this.af.auth.logout(); 
    return Promise.resolve(); 
} 

いずれかの方法を、あなたがもし/ときPR確認するために監視する必要がありますマージされます。

+0

ありがとうございます!非常に小さな間違いについては時間がかかる!私はもっ​​と慎重に私のIDEを見ている必要があります... – BlackHoleGalaxy

関連する問題