我正在尝试添加一个 Route Guard,它将向 PHP API 发送 JWT,该 API 将根据用户是否经过身份验证返回 true 或 false。通过我的测试,Route Guard 一直有效,直到它真正调用 API。如果 API 返回 false,则守卫按预期工作。但是,如果 API 返回 true,那么守卫似乎想要重定向用户,就好像它返回 false 一样,但它没有显示主屏幕,而是只显示空。
auth.guard.ts
canActivate(): boolean {
if (localStorage.getItem('portfolioJWT') === null) {
this.router.navigate(['/']);
return false;
} else {
const token = JSON.parse(localStorage.getItem('portfolioJWT'));
this.authService.isAuth(token).subscribe(res => {
console.log(res);
if(!res) {
this.router.navigate(['/']);
console.log("NOT Authorized");
return false;
} else {
console.log("Authorized");
return true;
}
});
}
}
auth.service.ts
isAuth(token: string): Observable<Boolean> {
const authHttpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer ' + token
})
};
return this.http.post<Boolean>('http://portfolioapi/api/checkAuth', {}, authHttpOptions);
}
我让守卫控制台记录返回的值,以及用户是否被授权,它会显示正确的数据。