javascript - 如何处理 401 Unauthorized 响应与使用 RxJS 的 Angular 8 服务中的其他错误不同?
问题描述
我有一个 REST API,它要求每次调用都通过访问令牌来识别用户。
如果令牌未提供或已过期,每个 API 端点都会返回 401 UNAUTHORIZED 响应。
在某些情况下,我使用计时器调用 API。
在我的服务类中:
getFoo(id: String): Observable<Foo> {
return this.http.get<Foo>(url, HTTP_OPTIONS);
}
getFooList(): Observable<Foo[]> {
return timer(0, FIVE_MINUTES).pipe(
switchMap(() => this.http.get<Foo[]>(url, HTTP_OPTIONS))
);
}
然后在我的组件中
fooList: Foo[] = [];
ngOnInit(): void {
this.loadFooList();
}
private loadFooList() {
this._fooService.getFooList().subscribe(
(fooList) => this.fooList = fooList,
(err) => console.error(err)
);
}
如何检查服务本身是否收到 401 响应?而不是必须在使用该服务的每个组件中执行此操作?
解决方案
我使用了拦截器。
auth.interceptor.ts
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(
private _router: Router,
) { }
intercept(httpRequest: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(httpRequest).pipe(
catchError((error) => {
if (error.status == 401) {
this._router.navigate(['/login']);
} else {
return Observable.throw(error);
}
})
);
}
}
在我的app.module.ts 中将其添加为提供程序
@NgModule({
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true
},
],
bootstrap: [AppComponent,]
})
export class AppModule { }
推荐阅读
- python - Python Matplotlib:如何设置 x 轴刻度分辨率?
- python - 导入 csv 时的 psycopg2 问题
- reactjs - React.js 中的状态
- jquery - 如何操作此字符串并组合重复键的值?
- android - 在 Windows 上获取特定 Android 应用程序的 logcat
- python - Coinbase Python 似乎可以缓存 OAuth 用户
- reactjs - ReactJS - 如何动态构建路由
- java - 在我的程序中使用我的 find 方法时出现问题
- java - 返回带有弹簧事件的对象?
- javascript - 试图将 JS && 运算符函数转换为 C#