我想使用Angular2路由器衛兵來限制對我的應用程序中的某些頁面的訪問。我正在使用Firebase身份驗證。爲了檢查用戶是否使用Firebase登錄,我必須使用回調呼叫FirebaseAuth
對象上的.subscribe()
。這是在保護的代碼:Angular2 canActivate()調用異步函數
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
一個頁被打印到控制檯(一些延遲等待來自火力的響應之後)。但是,導航從未完成。另外,如果我沒有登錄,我將重定向到/login
路線。所以,我遇到的問題是return true
不會向用戶顯示請求的頁面。我假設這是因爲我正在使用回調,但我無法弄清楚如何去做。有什麼想法嗎?
import像這樣 - > import {Observable} from'rxjs/Observable'; –