广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React如何使用refresh_token实现无感刷新页面
  • 348
分享到

React如何使用refresh_token实现无感刷新页面

2024-04-02 19:04:59 348人浏览 安东尼
摘要

目录步骤如下:具体实现步骤如下: 1-token过期根据refresh_token获取新的token 重新获取数据 2-创建一个新的axiOS实例 【使用request防止再次进入请

步骤如下:

1-token过期根据refresh_token获取新的token 重新获取数据

2-创建一个新的axiOS实例 【使用request防止再次进入请求拦截和请求响应而进入死循环】

3-根据请求相应的响应值 是不是401 是:说明token过期

然后进行判断store中的 user :{token:'*',refresh_token:'**'}中的 refresh_token和user对象是否存在 ,如果不存在说明之前没有登录过,直接去登录

4-使用新创建的axios 实例对象 requestFreshToken 发送新的请求 headers中的口令携带的是 refresh_token

5-获取token之后 将值重新赋值给user中的token

6-将user重新存入store中

7-重新获取刚才因为token失效而没有获取的数据 直接使用request 参数 来自error对象中【这里保存了之前token失效的请求数据】

具体实现

代码如下:

import axios from "axios";

import store from "@/store";
import router from "@/router";

import JSONBig from "json-bigint";

import { Toast } from "vant";

// var json = '{ "value" : 9223372036854775807, "v2": 123 }'
// // console.log(JSON.parse(json),777888);
// console.log(jsonBig.parse(json).value.toString(),88888);

const request = axios.create({
  //  所有相应的数据就不会存在大数字问题了
  transfORMResponse: [
    function(data) {
      try {
        // 如果转换成功则返回转换的数据结果
        return jsonBig.parse(data);
      } catch (err) {
        // 如果转换失败,则包装为统一数据格式并返回
        return {
          data
        };
      }
    }
  ]

  //baseURL: "Http://toutiao-app.itheima.net"
});

//  创建一个新的axios实例对象  这样做的目的就是 不会进入之前的请求拦截和响应 防止进入死循环
const requestFreshToken = axios.create();

// 添加请求拦截器
request.interceptors.request.use(
  function(config) {
    // 在发送请求之前做些什么
    //console.log(config, 9999);
    // if (window.localStorage.getItem('SET_TOKEN')) {
    //     config.headers.Authorization = 'Bearer ' + JSON.parse(window.localStorage.getItem('SET_TOKEN')).token
    // }

    if (store.state.user) {
      config.headers.Authorization = "Bearer " + store.state.user.token;
    }
    return config;
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
request.interceptors.response.use(
  function(response) {
    console.log(response, 3);

    return response;
  },
  async function(error) {
    console.log(error.response, 222);
    // 对响应错误做点什么
    // 对响应数据做点什么
    const status = error.response.status;
    if (status == 400) {
      //  请求参数错误
      Toast.file("请求参数错误");
    } else if (status == 401) {
      // 用户认证失败  若传递token,但token过期,则返回401

      
      const { user } = store.state;
      if (!user || !user.refresh_token) {
        // 完全没有登陆过  无token
        return router.push("/login");
      }
      // 有token 但是 token过期
      try {
        //  根据 refresh_token  获取新的token
        const { data } = await requestFreshToken({
          method: "PUT",
          url: "/v1_0/authorizations",
          headers: {
            Authorization: "Bearer " + user.refresh_token
          }
        });
        // 重新对user中token进行赋值
        user.token = data.data.token;
        // 将新的user对象重新存到store中
        store.commit("setUser", user);
        //  这里重新发送请求后  使用的是request  又会走上面的请求拦截  又会重新携带刚刚存的新的token
        return request(error.response.config);
      } catch (error) {}
      //  捕获异常就直接重新登陆
      return router.push("/login");

      Toast.file("用户认证失败");
    } else if (status == 403) {
      // 客户端没有权限
      Toast.file("客户端没有权限");
    } else if (status == 405) {
      //  请求方法不支持
      Toast.file("请求方法不支持");
    }
    return Promise.reject(error);
  }
);

export default request;

到此这篇关于React如何使用refresh_token实现无感刷新页面的文章就介绍到这了,更多相关React refresh_token无感刷新内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: React如何使用refresh_token实现无感刷新页面

本文链接: https://www.lsjlt.com/news/147423.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React如何使用refresh_token实现无感刷新页面
    目录步骤如下:具体实现步骤如下: 1-token过期根据refresh_token获取新的token 重新获取数据 2-创建一个新的axios实例 【使用request防止再次进入请...
    99+
    2022-11-13
  • React怎么使用refresh_token实现无感刷新页面
    这篇文章主要介绍了React怎么使用refresh_token实现无感刷新页面的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React怎么使用refresh_token实现无感刷新页面文章都会有所收获,下面我们...
    99+
    2023-06-30
  • 详细聊聊前端如何实现token无感刷新(refresh_token)
    目录关于无感刷新的理解: 下面是关于使用vuex来实现的写法axios工具函数(请求拦截器与响应拦截器)总结关于无感刷新的理解:  实现token无感刷新对于前端...
    99+
    2022-11-13
    前端无感知刷新token 前端自动刷新token 前端怎么刷新token
  • 如何实现无感刷新token
    目录1、需求方法一方法二方法三2、实现3、问题解决问题一:如何防止多次刷新token问题二:同时发起两个或者两个以上的请求时,其他接口怎么解决前言: 最近在做需求的时候,涉及到登录t...
    99+
    2022-11-12
  • Vue3+Vite使用双token实现无感刷新
    目录前言一、token 登录鉴权二、何为双 token双 token 验证流程注意事项三、服务端代码1. 搭建koa2服务器2. 双token3. 路由4. 应用中间件四、前端代码1...
    99+
    2023-05-17
    Vue3 无感刷新 Vue3 双token无感刷新
  • 使用javascript怎么实现页面无刷新更新数据
    这篇文章给大家介绍使用javascript怎么实现页面无刷新更新数据,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 首先在服务器上建立一个CheckUser.asp文件,用来检测用户是否存在,根据用户是否存在...
    99+
    2023-06-10
  • Ajax如何实现无闪烁定时刷新页面
    这篇文章主要介绍Ajax如何实现无闪烁定时刷新页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在Web开发中我们经常需要实现定时刷新某个页面:来保持session的值或者检查session的值是否为空(比如说防止同...
    99+
    2023-06-08
  • Ajax如何实现页面无刷新留言效果
    这篇文章将为大家详细讲解有关Ajax如何实现页面无刷新留言效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。利用Ajax实现页面无刷新留言效果实现效果前言:在百度贴吧,以及一些论坛中,当你回复或者评论完毕...
    99+
    2023-06-08
  • ajax如何实现无刷新分页
    这篇文章主要介绍ajax如何实现无刷新分页,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:在普通的分页中,一旦页码改变,则url改变,整个页面都会刷新,如果我们希望页码的改变...
    99+
    2022-10-19
  • 如何使用AJAX实现无刷新数据分页
    这篇文章将为大家详细讲解有关如何使用AJAX实现无刷新数据分页,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、实现过程注意:一下的内容都是在服务器内使用的。首先要在服务器的路径下建立几个文件,比如,pa...
    99+
    2023-06-08
  • JavaScript如何实现页面的刷新
    这篇文章主要讲解了“JavaScript如何实现页面的刷新”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript如何实现页面的刷新”吧! ...
    99+
    2022-10-19
  • PHP+Ajax如何解实现页面无刷新发表评论
    小编给大家分享一下PHP+Ajax如何解实现页面无刷新发表评论,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2022-10-19
  • 如何使用ajax和history.pushState无刷新改变页面URL
    本篇内容介绍了“如何使用ajax和history.pushState无刷新改变页面URL”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望...
    99+
    2022-10-19
  • jQuery的ajax中如何使用FormData实现页面无刷新上传功能
    小编给大家分享一下jQuery的ajax中如何使用FormData实现页面无刷新上传功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1,先看效果图期望的功能和效果很简单:点击页面中的上传...
    99+
    2022-10-19
  • vue中如何实现页面刷新以及局部刷新
    vue中如何实现页面刷新以及局部刷新,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一.全页面刷新修改 App.vue,代码如下:<template> &n...
    99+
    2023-06-26
  • 如何实现Ajax无刷新分页效果
    这篇文章给大家分享的是有关如何实现Ajax无刷新分页效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Ajax无刷新分页效果,如下代码实现<!doctype ht...
    99+
    2022-10-19
  • AngularJS如何实现页面定时刷新
    这篇文章主要介绍了AngularJS如何实现页面定时刷新,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。有时我们在前端可能会有这样的需求:1、...
    99+
    2022-10-19
  • Ajax如何实现页面自动刷新
    这篇文章主要介绍了Ajax如何实现页面自动刷新,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Ajax简介:AJAX即“Asynchronous Javascript And ...
    99+
    2023-06-08
  • 怎么使用Yii整合的pjax实现无刷新加载页面
    本篇内容主要讲解“怎么使用Yii整合的pjax实现无刷新加载页面”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Yii整合的pjax实现无刷新加载页面”吧...
    99+
    2022-10-19
  • 如何使用ajax实现无刷新改变页面内容和地址栏URL
    本篇内容主要讲解“如何使用ajax实现无刷新改变页面内容和地址栏URL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用ajax实现无刷新改变页面内容和地址...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作