将Angular与AngularFire2(Firebase软件包)一起使用,并尝试使用防护来阻止除一个用户以外的所有用户访问特定路由。但是下面的代码不会起作用。我收到错误:
Class' AuthGuard'错误地实现界面' CanActivate'。 键入' void'不能赋值为' boolean |可观察的| 无极'
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import { AngularFire, FirebaseListObservable } from 'angularfire2';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private af: AngularFire) { }
canActivate() {
this.af.auth.subscribe(auth => {
if (auth.uid === 'xyz123') {
return Observable.of(true);
} else {
return Observable.of(false);
}
})
}
}
答案 0 :(得分:2)
canActivate() {
return this.af.auth
.map(auth => {
return auth.uid === 'xyz123';
})
}
路由器需要boolean
或Observable<boolean>
,但如果您致电subscribe
canActivate
,则会返回Subscription
。
如果您使用map
,则返回值为Observable
。