首页
学习
活动
专区
工具
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

    针对分布式或集群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

    ionic3升级适配angular5

    昨天angular5和ionic3同时发布更新了,为了用上angular5新特性,还是有必要踩下坑,当然踩坑白老鼠建议选用一个最近不用维护项目。...首次支持angular5ionic3版本 然后再看下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 框架时候我刻意避免了这个问题。

    49341

    让jwt来保护你接口服务

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

    59540

    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,用规则去卡控流量。

    1.9K21

    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 可能会被拦截进而导致用户信息泄露。

    61830
    领券