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 是否已合并。
在我的应用程序上,我设置了一个授权服务。非常简单的行为。
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 是否已合并。