0
我有一個路線警衛,檢查用戶當前是否登錄:canActivate失敗不是重定向預期
import {Injectable} from "@angular/core"
import {CanActivate} from "@angular/router"
import {Observable} from "rxjs/Observable"
import {UserService} from "./user.service"
@Injectable()
export class LoggedInGuard implements CanActivate {
constructor (private userService: UserService) {}
canActivate(): Observable<boolean> {
return this.userService.getLoginStatus()
}
}
user.service:
import {Injectable} from "@angular/core"
import {Router} from "@angular/router"
import {Observable} from "rxjs/Observable"
import {AngularFireAuth} from "angularfire2/auth"
import * as firebase from "firebase/app"
@Injectable()
export class UserService {
private user: firebase.User
constructor (private router: Router, private afAuth: AngularFireAuth) {
this.afAuth.authState.subscribe(user => {
this.user = user
})
}
public login (email: string, password: string) {
this.afAuth.auth.signInWithEmailAndPassword(email, password).then(user => {
this.user = user
this.router.navigateByUrl("/dashboard")
})
}
public logout() {
this.afAuth.auth.signOut()
}
public getLoginStatus(): Observable<boolean> {
return this.afAuth.authState.map(Boolean)
}
}
而且從/
重定向到/login
:
{path: "", redirectTo: "login", pathMatch: "full"}
一切正常,當用戶登錄,或者如果我不適用直接轉到/
或/login
(前者正確地重定向到後者)。但是,如果我嘗試在未登錄的情況下導航到受保護的路由,它會將我重定向到/
,但不是再次重定向,而是停在空白頁面上。
是否有第二重定向不起作用的原因?或者更好的做法是讓後衛直接去/login
,但我不確定如何在可觀察的情況下做到這一點。