I am true that CanActivate returned true but in my component when I call the database still get 401 error.
@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 method:
private isTokenExpired = (token: any): boolean => {
return Number(token.issued_at) + Number(token.expires_in) >= new Date().getTime();
}
I set a break point and found it returned true. However in my component I hit the database I got 401 error.
My component
async ngOnInit() {
await this.myService.getInformation('url').then(() => this.loading()).catch(this.showing = false;));}
The getInformation
method in another class.
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();
});
});
}
Found it.
I used apigee for my OAuthV2 policy. By this:
So I have to match the data format when calculate the sum.
Which means
==>