【发布时间】:2020-10-17 03:09:30
【问题描述】:
CanActivate 确实返回了 true,但在我调用数据库时在我的组件中仍然出现 401 错误。
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private route: ActivateRouteSnapshot, private tokenService: TokenService) {}
public canActivate = (
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean>|Promise<boolean>|boolean => {
const token = this.tokenService.token; // get jwt token
if (!token || this.isTokenExpired(token)) {
this.route.navigateByUrl('/login');
return false;
}
return true;
}
}
isTokenExpired 方法:
private isTokenExpired = (token: any): boolean => {
return Number(token.issued_at) + Number(token.expires_in) >= new Date().getTime();
}
我设置了一个断点,发现它返回了 true。但是在我的组件中,我访问了数据库,但出现 401 错误。
我的组件
async ngOnInit() {
await this.myService.getInformation('url').then(() => this.loading()).catch(this.showing = false;));}
另一个类中的getInformation 方法。
public getInformation = (url: string): Promise<void> => {
return new Promise(resolve, reject) => {
this.subscription.get().subscribe(response => {
this.data = response;
resolve();
},
error => {
console.log(error); // 401 error here
reject();
});
});
}
【问题讨论】: