В моем проекте бэкэнд выставил токен обновления api. Когда вы входите в систему, вы получаете действительный токен и обновляете токен. Когда истекает срок действия токена, вам необходимо сделать вызов обновления, разрешенный старым токеном токена истек и токен обновления. Ответ возвращает новый действительный токен и новый токен обновления. В настоящий момент я пытаюсь внедрить его в свой защитный щит. Это код:angular2 refresh token через службу
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable } from 'rxjs/Rx';
import { SessionService } from '../services/session.service';
@Injectable()
export class AuthorizationGuard implements CanActivate {
constructor(private sessionService: SessionService, private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> {
if (this.sessionService.isAuthenticated()) {
console.log('guard has cookies');
return true;
} else {
if(this.sessionService.checkStorageSession() == null) {
this.router.navigate(['/']);
} else {
console.log('guard will refresh token via refresh token call ');
this.sessionService.refreshToken()
.subscribe(
data => {
console.log('guard refresh success');
this.sessionService.destroySessionCookie();
this.sessionService.rememberUser(data.accessToken);
this.sessionService.rememberRefreshTocken(data.refreshToken);
this.sessionService.setSessionCookie(data.accessToken);
this.sessionService.setRefreshTocken(data.refreshToken);
return true;
},
error => {
console.log('session refresh fail: ' + error);
this.router.navigate(['/']);
return false;
}
);
}
}
}
}
Но проблема canActivate вызывает, начинается вызов, обновляет маркер, но я получаю 403 несанкционированных от других вызовов, которые находятся на активированной странице до ответа успеха от обновить. Также я не могу понять, как обновить токен, когда я стою на странице с кнопкой сохранения, истекает токен, я нажимаю кнопку сохранения и обновления, но с истекшим токеном. Просьба предложить подходы: s
Спасибо братан! Это сработало! У меня есть только одна проблема сейчас - когда я использую охранник для активации, это вызывает вызов обновления, но после этого он не переходит к пути, который я нажал в меню. Также после обновления токена я пытаюсь щелкнуть второй раз на одном и том же элементе, но событие охранника не вызывается ... Я должен щелкнуть по другому элементу из меню, а затем путь активируется успешно. Любая идея, как справиться с этим ударом пути? –
Извините, у меня нет ответа. – Nikolai