千家信息网

React怎么使用refresh_token实现无感刷新页面

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍了React怎么使用refresh_token实现无感刷新页面的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React怎么使用refresh_token实
千家信息网最后更新 2025年01月19日React怎么使用refresh_token实现无感刷新页面

这篇文章主要介绍了React怎么使用refresh_token实现无感刷新页面的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React怎么使用refresh_token实现无感刷新页面文章都会有所收获,下面我们一起来看看吧。

步骤如下:

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      /*                                 token过期 根据refresh-token获取新的token                                  1-发送请求 获取新的token                                2-根据新的token重新发送请求 实现无感刷新                                                 */      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实现无感刷新页面"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

数据 对象 页面 错误 参数 实例 知识 内容 客户 客户端 方法 权限 用户 篇文章 拦截器 循环 支持 登录 登陆 认证 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 东莞市区块链软件开发 禅城区网络安全 软件开发可行性的风险 什么时关系数据库的范式 手机天气预报软件开发 数据库事务的隔离性怎么理解 西安高新区网络安全 完全学会软件开发要多久 甘肃网络安全预案 ci 服务器 更新文件到数据库中失败 csgo社区服务器根据你的过滤器设置 传奇服务器登陆看不见人物 叛乱沙漠风暴老是被踢出服务器 数据库备份与恢复方案 贾汪区创新软件开发 网络技术泛在化的技术驱动 网络安全部队提供保护 2020年大连市网络安全招标 哪里有网络安全课程 逆战能刷的免费服务器 江苏智能网络技术代理品牌 三星pay不能用连接不到服务器 聊天系统数据库连接失败 安卓自动试玩软件开发 贵池区口碑好软件开发服务设备 软件开发有中年危机吗 福州果蔬软件开发哪家专业 介绍互联网科技的视频 笔记本一键退出云服务器
0