【发布时间】:2021-10-13 15:47:44
【问题描述】:
我目前正在构建一个路由守卫来检查我的客户端是否经过身份验证。因为我只使用 http cookie,所以我必须向我的服务器发送一个请求,然后返回该 cookie 是否有效。这是我的守卫的代码:
export class AuthGuard implements CanActivate {
constructor (private auth: AuthService){}
async canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Promise<boolean> {
let isAuthenticated : boolean = false;
await this.auth.getAuthStatus().subscribe(
res => {
if(res.status == 200){
isAuthenticated = true;
}
})
console.log(isAuthenticated)
return isAuthenticated;
}
}
服务只是一个简单的http调用:
getAuthStatus(): Observable<HttpResponse<any>>{
return this.http.post(environment.server + environment.routes.authRoutes.status, "", {
withCredentials: true,
observe: 'response'
})
}
我面临的问题是我的守卫必须为路由器返回一个布尔值,并且由于我使用 .subscribe 它返回 false,因为它在我 .subscribe 完成之前返回 siAuthenticated。我尝试添加等待并返回一个承诺,但它在我的情况下不起作用或者我没有正确使用它。 我尝试在不同的帖子中找到解决方案,但没有一个对我有用(或者我只是没有正确理解它们并以错误的方式实施它们)。
谢谢
【问题讨论】:
-
简短回答,不要。而是返回一个 observable。
标签: angular rxjs angular-guards