Я работал над добавлением охранника маршрута и перехватчика токенов в проекте Angular 6.
В canActivate охранника маршрута я вызываю асинхронный метод c, который проверяет, есть ли токен доступа срок действия истек:
Если да, проверяет срок действия маркера refre sh и, если срок его действия также истек, пользователь выходит из системы, в противном случае получает новый токен доступа с помощью refre sh токен.
Если нет, то пользователь перемещается к маршруту.
Однако, когда срок действия токена истек, (точка 1 ), маршрут не перемещен в. Я перепробовал все и все комбинации, но это все еще не работает.
AuthGuard.service.ts
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const isAuthenticated = await this.auth.isAuthenticated();
if (isAuthenticated) {
return true;
} else {
return false;
}
}
Auth.service.ts
public async isAuthenticated() {
// Check whether the token is expired and return true or false
const token = sessionStorage.getItem('token');
if (token) {
if (await this.checkTokenValidity(token)) {
return true;
} else {
return false;
}
}
return false;
}
public checkTokenValidity = async (token) => {
//checking if access token is valid or not
const isAccessTokenExpired = this.tokenService.tokenExpiry(token);
if (isAccessTokenExpired) {
const response = await this.tokenService.getNewToken();
}
const isSignatureValid = this.tokenService.isSignatureValid(sessionStorage.getItem('token'));
if (!isSignatureValid) {
return false;
}
return true;
}
getNewToken = async () => {
const url = 'api/refresh/';
const refreshToken = Object.assign({}, { refresh: refreshToken });
sessionStorage.removeItem(TOKEN);
// if refresh token has expired then log the user out.
if (this.tokenExpiry(refreshToken)) {
sessionStorage.clear();
this.router.navigate([''])
return;
}
return this.apiService.postData(url, refreshToken).toPromise();
}