【发布时间】:2016-11-20 09:30:59
【问题描述】:
我正在尝试使用 Angular2 路由器防护来限制对我应用程序中某些页面的访问。我正在使用 Firebase 身份验证。为了检查用户是否使用 Firebase 登录,我必须通过回调调用 FirebaseAuth 对象上的 .subscribe()。这是守卫的代码:
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { AngularFireAuth } from "angularfire2/angularfire2";
import { Injectable } from "@angular/core";
import { Observable } from "rxjs/Rx";
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private auth: AngularFireAuth, private router: Router) {}
canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable<boolean>|boolean {
this.auth.subscribe((auth) => {
if (auth) {
console.log('authenticated');
return true;
}
console.log('not authenticated');
this.router.navigateByUrl('/login');
return false;
});
}
}
当导航到有保护的页面时,authenticated 或 not authenticated 会打印到控制台(在等待来自 firebase 的响应一段时间后)。但是,导航永远不会完成。另外,如果我没有登录,我会被重定向到/login 路由。所以,我遇到的问题是return true 没有向用户显示请求的页面。我假设这是因为我正在使用回调,但我无法弄清楚如何做到这一点。有什么想法吗?
【问题讨论】:
-
像这样导入 Observable -> import { Observable } from 'rxjs/Observable';
标签: typescript angular angular2-routing