Angularfire2 属性 'then' 在类型 'void' 上不存在

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

在我的应用程序上,我设置了一个授权服务。非常简单的行为。

appComponent 包含一个简单的按钮,用于通过事件 (click)='login' 通过 Google 登录。在我接受之后,我想将我的用户重定向到 /account.

该应用程序按预期工作但是 我在 ng serve:

上遇到错误

[default] C:\Project\src\app\app.component.ts:24:8

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

[default] C:\Project\src\app\services\auth.service.ts:28:22

这些错误似乎是非阻塞的,因为应用似乎可以正常运行。 你知道如何解决它们吗?

我猜问题似乎出现了,因为我随后应用了返回的_auth.login()结果,这是angularfire auth登录方法returns一个承诺......但我不知道如果这确实是问题所在,我该如何重构我的代码以正确调用服务。我认为(如果我错了请纠正我)从服务本身调用重定向是个坏主意。

这是我的文件。

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']);
    });
}

我的授权服务:

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 示例吗?

AngularFire2 的 logout 方法 doesn't return a Promise:

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

有一个 unmerged PR 可以 logout return 一个 Promise,但目前没有。

您可以将 app.component.ts 代码更改为:

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

或者您可以将 AuthService 更改为:

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

无论哪种方式,您都需要观察 if/when PR 是否已合并。