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

带refresh_token的Angular5 Http拦截器

是一种用于处理HTTP请求的中间件,它可以在发送请求之前或接收响应之后对请求进行拦截和处理。refresh_token是一种用于刷新访问令牌(access_token)的凭证,当访问令牌过期时,可以使用refresh_token获取新的访问令牌,以保持用户的持续登录状态。

在Angular5中,可以通过创建一个HttpInterceptor类来实现带refresh_token的拦截器。该拦截器可以用于在每个HTTP请求中自动添加refresh_token,并在访问令牌过期时自动刷新访问令牌。

以下是一个示例的带refresh_token的Angular5 Http拦截器的代码:

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

@Injectable()
export class RefreshTokenInterceptor implements HttpInterceptor {
  constructor() {}

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const access_token = localStorage.getItem('access_token');
    const refresh_token = localStorage.getItem('refresh_token');

    if (access_token) {
      request = request.clone({
        setHeaders: {
          Authorization: `Bearer ${access_token}`
        }
      });
    }

    return next.handle(request).pipe(
      catchError(error => {
        if (error.status === 401 && refresh_token) {
          // 发送刷新访问令牌的请求
          return this.refreshAccessToken().pipe(
            switchMap((response: any) => {
              // 更新本地存储的访问令牌
              localStorage.setItem('access_token', response.access_token);
              // 更新请求头中的访问令牌
              request = request.clone({
                setHeaders: {
                  Authorization: `Bearer ${response.access_token}`
                }
              });
              // 重新发送原始请求
              return next.handle(request);
            }),
            catchError(error => {
              // 处理刷新访问令牌失败的情况
              // 例如,跳转到登录页面
              return throwError(error);
            })
          );
        } else {
          // 处理其他错误情况
          return throwError(error);
        }
      })
    );
  }

  refreshAccessToken(): Observable<any> {
    // 发送刷新访问令牌的请求
    // 返回一个Observable对象,用于订阅刷新访问令牌的结果
  }
}

在上述代码中,我们首先从本地存储中获取access_token和refresh_token。然后,我们在每个请求的请求头中添加access_token。如果请求返回401未授权错误,并且存在refresh_token,则发送刷新访问令牌的请求,并更新本地存储的access_token。最后,我们重新发送原始请求。

这是一个基本的带refresh_token的Angular5 Http拦截器的实现示例。根据具体的业务需求,你可以根据需要进行修改和扩展。

腾讯云提供了一系列与云计算相关的产品,例如云服务器、云数据库、云存储等。你可以根据具体的需求选择适合的产品。更多关于腾讯云产品的信息,你可以访问腾讯云官方网站:https://cloud.tencent.com/

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

相关·内容

spring cloud网关之zuul

拦截器类型 pre filters 在zuul路由带下级服务之前执行,一般用来鉴权、限流 routing filters zuul路由动作的执行者,是发送构建和发送http请求的地方 post filters...类型执行报错post类型的也会执行拦截器执行顺序 相同类型的拦截器,数字越低,优先级也高 使用filterOrder()来定义,后面会有例子。...不同类型的拦截器,优先级高到低 pre > routing > post 官网推荐的一些拦截器的执行顺序定义 当我们需要做限流的时候,可以在pre拦截器类型做,并且优先级要最高,比鉴权都要高,可以使用...还会返回 refresh_token(不能给用户,保存在zuul中数据库,redis中) post http://localhost:10090/auth/oauth/token?...orderNo=123456 没有带token的情况 { "error": "unauthorized", "error_description": "Full authentication is

1.2K10
  • 【总结】1023- 如何优雅的管理 HTTP 请求和响应拦截器?

    本文我会主要和大家分享以下几点: 问题分析和方案设计; 重构后效果; 开发过程; 后期优化点; 如果你还不清楚什么是 HTTP 请求和响应拦截器,那么可以先看看《77.9K Star 的 Axios 项目有哪些值得借鉴的地方...拦截器开发更加方便 在后续业务拓展新的拦截器,仅需 3 个步骤既可以完成拦截器的开发和使用,拦截器调度器会自动调用所有拦截器: ? 拦截器开发更加方便 3....开发拦截器脚手架 这个的目的其实很简单,让团队内其他人直接使用脚手架工具,按照内置脚手架模版,快速创建一个拦截器,进行后续开发,很大程度统一拦截器的开发规范。...目前思路: 处理拦截器失败的情况; 处理拦截器调度顺序的问题; 拦截器同步执行、异步执行、并发执行、循环执行等等情况; 可插拔的拦截器调度; 考虑参考 Tapable 插件机制; 六、本文总结 本文通过一次简单的项目重构总结出一个请求层拦截器调度方案...后续我仍有很多需要优化的地方,作为自己的一个 TODO LIST,如果是做成完全通用,则定位可能更偏向于拦截器调度容器,只提供一些通用拦截器,其余还是由开发者定义,库负责调度,但常用的请求库一般都已经做好

    1.3K50

    ionic3升级适配angular5

    昨天angular5和ionic3同时发布更新了,为了用上angular5的新特性,还是有必要踩下坑的,当然踩坑的白老鼠建议选用一个最近不用维护的项目。...首次支持angular5的ionic3版本 然后再看下angular5的版本,同样发布了两个版本,一个是普通稳定版,一个是beta版,其中前者如图所示修复了几个bug,那若升级,当然选择普通稳定版比较好...angular5的最新beta版 在ionic3官网建议是更新依赖到angular5.0.0版本,而根据上述说明,优先选择做了做了bug修复的angular5.0.1版。...的项目升级的过程还是比较平缓的,对于大多数项目,主要应对的是Http模块、Router还有管道的变更。.../common/http中,更新Http模块后,需要使用HttpClientModule替换原有HttpModule,并在使用http服务时,可以去掉map(res=>res.json())的调用,因为新模块中已经不再需要了

    2.5K40

    聊聊我的HTTP框架近况:支持AOP,拦截器,配置文件读取...

    jsoncat:https://github.com/Snailclimb/jsoncat (仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架) 距离上一次给小伙伴们汇报简易版的...01 这半个月里,我的 HTTP 框架已经支持 AOP、拦截器(也是 AOP 的一种)、配置文件读取等功能了。 ? 目前的话,整个 HTTP 框架基本已经具备我最初想要实现的全部功能了。...但是,写这个 HTTP 框架的时候,我记得有 3 次我熬夜到凌晨 2 点左右。有 2 个早晨,因为有“灵感”,我 5 点多久爬起来写代码了。...大部分时间,我都花在了对现有代码的重构上。 毕竟我这个 HTTP 框架开源出来的主要目的之一是为了给需要的小伙伴学学习,我必须要保证我写的代码可读性。...自己学到了什么设计模式,就像立马用到自己的项目上去,即使这个设计模式在当前业务场景并不适合。这真的是一个不好的习惯,不过,在写这个 HTTP 框架的时候我刻意避免了这个问题。

    49641

    针对分布式或集群session同步问题,改用jwt的续期解决方案

    token超时,客户端 携带refresh_token调用中间件接口获取新的access_token; 3.中间件接受刷新token的请求后,检查refresh_token是否过期。...如过期,拒绝刷新,客户端收到该状态后,跳转到登录页; 如未过期,生成新的access_token和refresh_token并返回给客户端(如有可能,让旧的refresh_token失效),客户端携带新的...(拒绝的场景:失效,长时间未登录,频繁刷新) 2.0 变动 1.登录 2.登录拦截器 3.增加刷新access_token接口 4.退出登录 5.修改密码 3.0实现 场景:自动续期 长时间未使用需重新登录...1.3 变动 1.登录 2.登录拦截器 3.退出登录 4.修改密码 解决方案 2.0 场景: access_token访问资源 refresh_token授权访问 设置固定时间X必须重新登录 1.登录成功...( 拒绝的场景:失效,长时间未登录,频繁刷新) 2.0 变动 1.登录 2.登录拦截器 3.增加刷新access_token接口 4.退出登录 5.修改密码 3.0 场景:自动续期 长时间未使用需重新登录

    2K30

    Centos7下使用Squid快速搭建带认证的HTTP代理服务器

    在centos下很容易就可以搭建好一个HTTP代理服务器,搭建一个socks5代理更是简单的不用说! 不管是测试用途还是自己使用,Squid都是一个很不错的代理工具!...老高最近搭建了一个简单的squid的正向代理,随便记记笔记! 如果只是想使用代理而不需要认证功能,tinyproxy也是不错的选择! 安装 安装狠简单!...basic_ncsa_auth /etc/squid3/passwords auth_param basic realm proxy acl authenticated proxy_auth REQUIRED http_access...allow authenticated # 这里是端口号,可以按需修改 # http_port 3128 这样写会同时监听ipv6和ipv4的端口,推荐适应下面的配置方法。...http_port 0.0.0.0:3128 权限控制 squid的权限控制很灵活,具体配置方法可以参考官方文档,或者Squid中文权威指南,具体工作原理有点像iptables,用规则去卡控流量。

    2.1K21

    让jwt来保护你的接口服务

    这种体验是非常不好的,oauth2在这方面做的比较好,除了签发token,还会签发refresh_token,当token过期后,会去调用refresh_token重新获取token,如果refresh_token...现在我们模拟oauth2的实现方式来完成JWT的refresh_token。...思路大概就是用户登录成功后,签发token的同时,生成一个加密串作为refresh_token,refresh_token存放在redis中,设置合理的过期时间(一般会将refresh_token的过期时间设置的比较久一点...; } 客户端调用接口时,在请求头中携带token,在拦截器中拦截请求,验证token的有效性,如果验证token失败,则去redis中判断是否是refresh_token的请求,如果refresh_token...已过期,请重新获取token"); return resultbean; } } refresh_token来换取token的伪代码如下: @PostMapping("refreshToken

    59840

    SpringSecurity 实现几种常见的登录方式

    protected void configure(HttpSecurity http) throws Exception { // 关闭 SpringSecurity 自带的 CSRF...无感刷新 JWT 有多种方案,这里我们用最常见的 access_token 和 refresh_token 的方案: 用户登录成功后签发两个 JWT:access_token 和 refresh_token...access_token 的有效时间短,用于正常访问服务器 refresh_token 的有效时间很长,用于在 access_token 过期时,去向服务器换取新的 access_token 和 refresh_token...去获取新的 access_token 和 refresh_token */ @GetMapping("refresh") ResponseResult refresh() {...这是因为微信认证服务器是以 HTTP 请求去访问的后端服务器, HTTP 请求是不安全的,里面的 access_token 可能会被拦截进而导致用户信息的泄露。

    73730
    领券