我想对某些路由的每个刷新请求进行一些验证。所以我正在使用 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
方式。但是我做了一些测试,但都没有奏效。如果有人可以帮助我,我会很高兴。