【发布时间】:2020-04-13 22:58:35
【问题描述】:
我想对某些路由的每个刷新请求进行一些验证。所以我使用 Angular AuthGuard。问题出在canActivate 方法中,我想使用在线 API 进行验证。
API 是 /token/verify,它只是获取 token 变量 (jwt) 并验证它是真还是假。
然后,如果验证未完成,将路由到 /login 页面,否则执行其余操作。
代码如下:
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
let token = this.auth.getToken();
let url = '/token/verify/';
if (!token) {
this.router.navigate(['/login']);
return false;
}
this.auth.verifyToken().then(res => {
return true;
}).catch(err => {
this.router.navigate(['/login']);
return false;
})
而verifyToken方法是这样的:
verifyToken(): Promise<boolean> {
let token = this.getToken();
return !token ?
new Promise<boolean>(resolve => {
resolve(false);
return false;
}) :
this.http.post(this.url + '/token/verify/', { 'token': token })
.toPromise()
.then((res) => {
localStorage.data = JSON.stringify(res);//(res.json());
return true;
}
).catch((error) => {
return false
});
}
问题是promise调用不起作用,会通过。我的意思是从本地存储检查它的第一部分工作正常。但是下一部分用在线 API 检查它是行不通的。并且authGuard 不会等待其响应来进行路由。
我想它应该是某种async/await 的方式。但是我做了一些测试,但都没有奏效。如果有人可以帮助我,我会很高兴。
【问题讨论】:
标签: javascript angular async-await es6-promise auth-guard