首页 文章

无法使用Observable.of(true)在Angular2中的AuthGuard中工作

提问于
浏览
1

使用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);
      }
    })
  }
}

1 回答

  • 2
    canActivate() {
        return this.af.auth
        .map(auth => {
          return auth.uid === 'xyz123';
        })
      }
    

    路由器需要 booleanObservable<boolean> ,但如果您调用 subscribe canActivate 将返回 Subscription . 如果使用 map ,则返回值为 Observable .

相关问题