Angular2 라우터 가드를 사용하여 내 앱의 일부 페이지에 대한 액세스를 제한하려고합니다. Firebase 인증을 사용하고 있습니다. 사용자가 중포 기지로 로그인되어 있는지 확인하기 위해, 나는 호출이 .subscribe()
온 FirebaseAuth
콜백와 객체입니다. 이것은 경비원의 코드입니다.
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
는 요청한 페이지를 사용자에게 표시하지 않는다는 것입니다. 나는 이것이 콜백을 사용하고 있기 때문이라고 가정하고 있지만 그렇지 않으면 어떻게하는지 알 수 없습니다. 이견있는 사람?