首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular 2全局捕获401刷新token

Angular 2是一种流行的前端开发框架,用于构建现代化的Web应用程序。全局捕获401刷新token是指在Angular 2应用程序中,当用户的访问令牌(token)过期或无效时,通过捕获HTTP 401未授权错误并自动刷新token,以确保用户的持续访问权限。

在Angular 2中实现全局捕获401刷新token的一种常见方法是使用Angular的拦截器(interceptor)。拦截器可以在每个HTTP请求之前或之后执行一些操作。以下是一个示例拦截器的代码:

代码语言:typescript
复制
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';

@Injectable()
export class TokenInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // 在请求头中添加token
    const token = this.getTokenFromLocalStorage();
    if (token) {
      request = request.clone({
        setHeaders: {
          Authorization: `Bearer ${token}`
        }
      });
    }

    return next.handle(request).pipe(
      tap(
        (event: HttpEvent<any>) => {
          if (event instanceof HttpResponse) {
            // 检查响应中是否包含401错误
            if (event.status === 401) {
              // 刷新token的逻辑
              this.refreshToken();
            }
          }
        },
        (error: any) => {
          // 检查请求错误是否为401错误
          if (error.status === 401) {
            // 刷新token的逻辑
            this.refreshToken();
          }
        }
      )
    );
  }

  private getTokenFromLocalStorage(): string {
    // 从本地存储中获取token
    // 实际应用中可能需要根据具体情况获取token
    return localStorage.getItem('token');
  }

  private refreshToken(): void {
    // 刷新token的逻辑
    // 实际应用中可能需要调用后端API来刷新token
  }
}

上述代码中,TokenInterceptor是一个实现了HttpInterceptor接口的拦截器类。在intercept方法中,我们首先从本地存储中获取token,并将其添加到请求头中。然后,通过调用next.handle(request)来继续处理请求。在处理响应时,我们检查响应的状态码是否为401,如果是,则执行刷新token的逻辑。同样地,如果请求发生错误且错误状态码为401,也执行刷新token的逻辑。

要在Angular 2应用程序中使用该拦截器,需要在应用程序的提供商(providers)数组中注册它。可以在根模块(通常是app.module.ts)中进行注册,如下所示:

代码语言:typescript
复制
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { TokenInterceptor } from './token.interceptor';

@NgModule({
  imports: [HttpClientModule],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: TokenInterceptor,
      multi: true
    }
  ]
})
export class AppModule { }

通过以上步骤,我们就可以在Angular 2应用程序中实现全局捕获401刷新token的功能了。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法给出具体的腾讯云产品链接。但是,腾讯云提供了丰富的云计算服务,包括云服务器、云数据库、云存储等,您可以访问腾讯云官方网站,了解更多关于腾讯云的产品和服务信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • JSON Web Token(JWT)教程:一个基于Laravel和AngularJS的例子

    eyJpc3MiOiJ0b3B0YWwuY29tIiwiZXhwIjoxNDI2NDIwODAwLCJodHRwOi8vdG9wdGFsLmNvbS9qd3RfY2xhaW1zL2lzX2FkbWluIjp0cnVlLCJjb21wYW55IjoiVG9wdGFsIiwiYXdlc29tZSI6dHJ1ZX0...该中间件用于过滤请求并验证JWT token。如果token无效,不存在或过期,则中间件将抛出一个可以捕获的异常。...return response(['Token has expired'], 401); } return parent::render($request, $e); } 如果用户认证并且token...我们也可以使用拦截器来创建一个全局的HTTP错误处理程序。这是我们的拦截器的一个例子,它们在浏览器的本地存储中可用时注入一个token。...还有很多关于JWT的内容,例如如何处理安全细节,以及在token过期时刷新令牌,但上述示例应演示使用JSON Web Token的基本用法,更重要的是显示优势。

    30.6K10

    【Appetite】ionic3实录(五)基本服务实现

    常规应用,一般会有通用服务和具体业务服务,而常用的通用服务有如下几个: 一、全局设置服务 ionic g provider config import { Injectable } from '@...ConfigProvider { constructor() { } /** * 获取域名 * @param versionType 版本类型,0:正式环境,1:测试环境,2:...0: domain = "http://"; break; //正式环境 case 1: domain = "http://"; break; //测试环境 case 2:...; } else { switch (resp.status) { case 401: errMsg = '无权限访问,或许登录信息已过期,请重新登录';...注意catch里面用了return,表示捕获了异常处理并返回,下次链式调用将进入then,这样每个调用网络请求后的逻辑操作可以全放在then里,省掉写catch的部分。

    3.1K40

    「 Flutter 项目实战 」设计企业级项目入口 main.dart 设计与实现 ( GSYGithubApp 源码解读·二 )

    、错误页展示、主页面加载 2.1 异常捕获 - runZoned 在 Flutter 中,还无法捕获的异常,如调用空对象方法异常、Futurer 中的异常等 同样,对于在 Dart 中的同步异常和异步异常...(如页面文字内容),全局共享的配置数据(如用户登录状态,系统颜色等) 由于本文是对 main.dart 的解析,所以我们针对第二种情况进行分析即可 对第一种情况感兴趣的同学可以点击上面链接查看...同时可以通知到注册了这些数据的地方,让他们自动取刷新对应的 ui ///初始化用户信息 static initUserInfo(Store store) async { var token...= await LocalStorage.get(Config.TOKEN_KEY); var res = await getUserInfoLocal(); if (res !...= null && res.result && token !

    96331

    「 Flutter 项目实战 」设计企业级项目入口 main.dart 设计与实现 ( GSYGithubApp 源码解读·二 )

    、错误页展示、主页面加载 2.1 异常捕获 - runZoned 在 Flutter 中,还无法捕获的异常,如调用空对象方法异常、Futurer 中的异常等 同样,对于在 Dart 中的同步异常和异步异常...(如页面文字内容),全局共享的配置数据(如用户登录状态,系统颜色等) 由于本文是对 main.dart 的解析,所以我们针对第二种情况进行分析即可 对第一种情况感兴趣的同学可以点击上面链接查看...同时可以通知到注册了这些数据的地方,让他们自动取刷新对应的 ui ///初始化用户信息 static initUserInfo(Store store) async { var token...= await LocalStorage.get(Config.TOKEN_KEY); var res = await getUserInfoLocal(); if (res !...= null && res.result && token !

    1.1K21

    前端程序员必知:单页面应用的核心

    从过去的 jQuery Mobie、Backbone 到今天的 Angular 2、React、Vue 2,除了版本号不同,他们还有很多的相同之处。 刚开始写商业代码的时候,我使用的是 jQuery。...我们可以在 Angular 应用、React 应用、Vue.js 应用 看到这些基本要素的影子,如:Vue Router、React Router、Angular 2 RouterModule 都是负责路由...相似的,而 Angular 2 的形式则是: { path: 'blog', component: BlogListComponent },{ path: 'blog/:id', component...如果 Token 已经过期了,则返回 401 或者类似的标志,客户端就在这个时候清除 Token,并让用户重新登录。...有时候也会犯懒一下,直接写一个全局变量。这个时候维护起代码来就是一场噩梦,需要全局搜索相应的变量。如果是调用某个特定的 Service 就比较容易找到调用的地方。

    1.5K90

    为什么要有refreshToken

    如果accessToken设置一个短暂的有效期2小时,攻击者能使用被盗取的accessToken的时间最多也就2个小时,除非再通过refreshToken刷新accessToken才能正常访问。...设置accessToken有效期是永久的,用户在更改密码之后,之前的accessToken也是有效的 总体来说有了refreshToken可以降低accessToken被盗的风险关于JWT无感刷新TOKEN...向服务器请求时,服务器会返回401的状态码来告诉用户此token过期了,此时就需要用到登录时返回的refreshToken调用刷新Token的接口(Refresh)来更新下新的token再发送请求即可。...话不多说,先上代码工具axios作为最热门的http请求库之一,我们本篇文章就借助它的错误响应拦截器来实现token无感刷新功能。...token,先返回一个promise阻塞请求并推进请求列表中 return new Promise((resolve) => { // 缓存网络请求,等token刷新后直接执行

    1.7K20

    构建Vue项目-身份验证

    补充:如何刷新过期的访问令牌? 关于身份验证,要处理令牌刷新401错误(token失效)比较困难,因此被许多教程所忽略。...在某些情况下,最好是在发生401错误时简单地注销用户,但是让我们看看如何在不中断用户体验的情况下刷新访问令牌。这是上面提到的代码示例中的401拦截器。...如果是,则我们正在检查401是否在令牌刷新调用本身上发生(我们不想陷入循环中) 永久刷新令牌!)。然后,代码将刷新令牌并重试失败的请求,并将响应返回给调用方。...如果访问令牌到期,所有请求将失败,并因此触发401拦截器中的令牌刷新。从长远来看,这将刷新每个请求的令牌,这样不太好。...通过保存刷新令牌promise,并向每个刷新令牌请求返回相同的promise,我们可以确保令牌仅刷新一次。 您还需要在设置请求header之后立即在main.js中安装401拦截器。

    7.1K20
    领券