Я работаю над приложением Angular 5, использующим неявный поток OAuth2.
У меня есть службы, которые выполняют HTTP-вызовы, следуя одному примеру моих служб:
@Injectable()
export class MyService {
constructor(public http: HttpClient) { }
public getAll(): Observable<Persona[]> {
return this.http.get<Persona[]>("http://mywebservice/persone");
}
}
Яиспользование перехватчиков для авторизации и добавления пользовательских атрибутов.После моего перехвата аутентификации:
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from "rxjs";
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor() {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let accessToken = sessionStorage.getItem("access_token");
if(accessToken)
{
request = request.clone({
setHeaders: {
Authorization: `Bearer ${accessToken}`
}
});
}
return next.handle(request);
}
}
И следуя тому, как я использую свои услуги:
public myMethod() {
this.myService.getAll().subscribe(
result => {
console.log(result);
}, error => {
// I don't want add redirection there...
console.error(error);
});
}
Теперь мне нужно, чтобы, когда любой HTTP-вызов получил результат 401, приложение перенаправляло пользователя настраница авторизации.
Как мне получить этот результат без дублирования кода?
Большое спасибо