0

在我的應用程序中,我設置了一個auth服務。非常簡單的行爲。Angularfire2 Property'then'在類型'void'上不存在

appComponent包含一個簡單的按鈕,用於通過Google登錄事件(click)='login'。我接受後,我想將我的用戶重定向到/account

該應用程序按預期方式工作BUT我遇到一個錯誤上ng serve

[默認] C:\項目\ SRC \應用\ app.component.ts:24:8

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

[默認] C:\項目\ SRC \應用\服務\ auth.service.ts:28:22

這些錯誤似乎是非阻塞,由於應用似乎正常工作。 你知道如何解決它們嗎?

我猜問題似乎出現,因爲我對返回_auth.login()結果這是angularfire身份驗證的登錄方法,它返回一個承諾再申請......但我不知道我該怎麼重構我的代碼以正確調用服務,如果確實是問題。我認爲(糾正我,如果我錯了)從服務本身調用重定向是個壞主意。

這是我的文件。

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:

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(); 
    } 
} 

你有使用AF正確的authservice的任何例子嗎?

回答

1

AngularFire2的logout方法doesn't return a Promise

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

有一個unmerged PRlogout回報的承諾,但目前,它沒有。

你既可以改變你的app.component.ts代碼:

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

或者你可以改變你的AuthService到:

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

無論哪種方式,你需要看,看看是否/何時PR被合併。

+0

謝謝!非常小的錯誤,這麼多​​時間!我應該仔細看看我的IDE ... – BlackHoleGalaxy

相關問題