Angular拦截器:在处理源请求之前刷新token(Observable)
创始人
2024-10-27 23:01:22
0

在Angular应用程序中,我们可以使用拦截器来执行常见的操作,比如:为HTTP请求添加授权头,或者在HTTP响应中捕获特定的错误等。在需求中,我们需要在发出HTTP请求之前刷新Token。这可以通过创建一个拦截器来实现。

首先,我们需要创建一个服务,称之为AuthInterceptorService,该服务使用Angular的HTTP Interceptor来实现我们的需求。代码示例如下:

import { Injectable } from '@angular/core'; import { HttpRequest, HttpHandler, HttpInterceptor, HttpErrorResponse } from '@angular/common/http'; import { Observable } from 'rxjs/Observable'; import { AuthService } from './auth.service'; import { tap, catchError } from 'rxjs/operators'; import { Router } from '@angular/router';

@Injectable() export class AuthInterceptorService implements HttpInterceptor {

constructor(private authService: AuthService, private router: Router) {}

intercept(request: HttpRequest, next: HttpHandler): Observable {

// add authorization header with jwt token if available
let currentUser = this.authService.currentUserValue;
if (currentUser && currentUser.access_token) {
    request = request.clone({
        setHeaders: { 
            Authorization: `Bearer ${currentUser.access_token}`
        }
    });
}

return next.handle(request)
  .pipe(
    catchError((error: HttpErrorResponse) => {
      if (error.status === 401 && !request.url.endsWith('/token')) {
        return this.authService.refreshToken()
          .pipe(
            tap(() => {
              next.handle(request);
            })
          );
      }

      this.router.navigate(['/login']);
    })
  );

} }

在上面的示例代码中,我们首先检查用户当前是否已登录并且是否具有凭证,如果有凭证,则将其添加到HTTP头中。然后,我们返回从next.handle(request)方法返回的可观察对象。我们使用管道运算符(pipe)来处理通过next.handle方法返回的可观察对象。这样,我们可以拦截所有HTTP响应并处理特殊情况。在catchError操作符中,我们检查HTTP响应是否为401状态码,并确定该用户是否尝试访问登录后的受保护资源。如果是这种情况,我们通过调用AuthService的refreshToken()方法来刷新令牌。最后,我们使用tap操作符来在刷新token后再次调用next.handle(request)方法。

相关内容

热门资讯

黑科技插件(红龙扑克)poke... 黑科技插件(红龙扑克)pokerrrr2真是真的是有挂!太实锤了起初真的有挂(2025已更新)(哔哩...
黑科技工具(wepoke挂透视... poker world新手教程相关信息汇总(需添加指定威信136704302获取下载链接);黑科技工...
黑科技辅助挂(德州之星ai)w... 黑科技辅助挂(德州之星ai)wpk微扑克素来是真的有挂!太实锤了从前有挂(2023已更新)(哔哩哔哩...
黑科技辅助挂挂(新版Wepok... 黑科技辅助挂挂(新版Wepoke)德扑助手切实是真的有挂!太坑了先前是真的有挂(2025已更新)(哔...
黑科技数据(微扑克总结)AAP... 黑科技数据(微扑克总结)AAPOKeR原先是真的有挂!太实锤了往昔真的有挂(2023已更新)(哔哩哔...
黑科技了解(新版Wepoke)... 黑科技了解(新版Wepoke)AApoker固有是真的有挂!太实锤了原来真的是有挂(2020已更新)...
黑科技系统(德州微扑克专用)w... 黑科技系统(德州微扑克专用)wEpoKe竟然是有挂!太无语了好像真的有挂(2022已更新)(哔哩哔哩...
黑科技规律(最新版wpk)来玩... WePoker透视辅助版本解析‌,黑科技规律(最新版wpk)来玩app德州总是真的有挂!太离谱了最初...
黑科技辅助(智星德州)德州wp... 黑科技辅助(智星德州)德州wpk德州一向存在有挂!太无语了总是有挂(2025已更新)(哔哩哔哩)1、...
黑科技好牌(poker wor... 黑科技好牌(poker world外挂)来玩德州本来是真的有挂!太坑了总是真的有挂(2022已更新)...