0
我在這些路由的Angular 2應用中有一個auth guard,我正在使用Firebase進行身份驗證。有什麼奇怪的是,我已經爲維護登錄用戶進行頁面刷新而對功能進行了整理,但是當我的認證守衛在路由上處於活動狀態時,它會一直告訴我用戶未登錄。是否有人可以向我解釋我做錯了什麼?AngularFire2 - AuthGuard認爲用戶沒有登錄,即使他們是
這裏是我的身份驗證後衛代碼:
constructor(private authService:AuthService, private router:Router) {
}
canActivate(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable<boolean> {
return this.authService.getAuthenticated().map(authenticated => {
if(authenticated) {
return true;
} else {
this.router.navigate(['/login']);
}
}).take(1);
}
然後在我的身份驗證服務,這裏的代碼,以確保用戶達最新:
authInfo$: BehaviorSubject<AuthInfo> = new BehaviorSubject<AuthInfo>(AuthService.UNKNOWN_USER);
constructor(private auth: AngularFireAuth, private router:Router) {
auth.subscribe((authState) => {
if (authState) {
const authInfo = new AuthInfo(authState.uid);
this.authInfo$.next(authInfo);
}
});
}
// Added a method to return the auth to be checked against
getAuthenticated(): Observable<any> {
return this.auth;
}
更新:我更新了我的canActivate
函數和auth服務,以適合我。
哦真棒,這工作得很好:)我注意到的事情是,即使這段代碼中,登錄狀態通過應用程序,但如果我刷新一個具有路線警衛的頁面,它仍然會重定向到登錄頁面。任何線索可能是什麼? –
確保您的app.module.ts是AuthGuardService的提供者。 – Ploppy
是的,我明白了。有趣的是,auth狀態的檢查發生在auth防護功能之後。我不確定這是否是一種競爭狀態,或者是什麼,因爲警衛立即發生,同時我的身份驗證檢查異步發生。嗯,我可能會做什麼想法? –