我正在开发一个使用OAuth2隐式流的Angular 5应用程序。
我有一些服务执行HTTP调用,以下是我的一个服务示例:
@Injectable()
export class MyService {
constructor(public http: HttpClient) { }
public getAll(): Observable<Persona[]> {
return this.http.get<Persona[]>("http://mywebservice/persone");
}
}
我正在使用拦截器来进行授权和添加自定义属性。以下是我的auth拦截器:
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结果时,应用程序将用户重定向到登录页面。
我如何避免代码重复而实现此功能呢?
非常感谢!