Vue中token刷新及token过期的实现

总:通过axios,vuex,及自定义的方法实现。
以下是思路:
1.做token刷新必不可少的是,token(请求时的token) / refresh_token(刷新token时用的refresh_token) / resetTime(token有效时间)
2.通过axios请求-回复来做相应的操作,具体实现如下:

对应修改之处:(自己看的,如果疑问,可留言)
一、在 main.js中 ,写入如下代码

import axios from 'axios'
import { getRefreshToken, isRefreshTokenExpired} from './assets/js/format' //刷新token的接口与过期时间倒计时
window.isReresh = false;//用于判断是否刷新,不能少// 添加请求拦截器,在请求头中加token
axios.interceptors.request.use(config => {let token = sessionStorage.getItem('Authorization');if (token) {config.headers.Authorization = token;}return config;},error => {return Promise.reject(error);});// http response 拦截器
axios.interceptors.response.use(response => {let resetTime= sessionStorage.getItem('resetTime');let token = sessionStorage.getItem('Authorization');if(token){//有没有tokenisRefreshTokenExpired(resetTime);if(resetTime<1200){//时间少于20分钟(1200),20分钟之内为期限if(!window.isReresh){window.isReresh = true;let refresh_token = sessionStorage.getItem('refresh_token')getRefreshToken(refresh_token).then(res => {window.isReresh = false;isRefreshTokenExpired(res.data.resetTime);// 重新获取的token有效时间store.commit('changeLogin',{//vuex中修改相关信息Authorization:res.data.access_token,token_type:res.data.token_type,refresh_token:res.data.refresh_token,});}).catch(err => {});}}else window.isReresh = false;}return response;  //请求成功的时候返回的data},error => {try {if (error.response) {endLoading();switch (error.response.status) {case 401://token过期,清除它,清除token信息并跳转到登录页面store.commit('DelToken');router.replace({path: '/login',query: {redirect: router.currentRoute.fullPath//登录之后跳转到对应页面}});return;case 403://权限store.commit('DelToken');router.replace({path: '/login',query: {redirect: router.currentRoute.fullPath//登录之后跳转到对应页面}});return;}}return Promise.reject(error.response.data)}catch (e) {}});

二、在 自定义的jsformat.js中 ,写入如下代码

export function getRefreshToken(param) { // 刷新token 注意这里用到的servicelet params = {refreshToken:param}return axios.post(baseUrl+'/account-center/refresh/token',params).then((res) => {return Promise.resolve(res.data)})
}export function isRefreshTokenExpired(timestamp) {clearInterval(window.interval);window.interval = setInterval(()=>{timestamp=timestamp-1sessionStorage.setItem('resetTime',timestamp)},1000)
}

三、在vuex中的mutation

changeLogin: function (state, user ) {// CryptoJS.enc.Base64.stringify(obj) 加密// CryptoJS.enc.Base64.parse(base64).toString(CryptoJS.enc.Utf8) 解密state.Authorization = user.token_type + ' ' + user.Authorization;state.refresh_token = user.refresh_token;state.user_message = CryptoJS.enc.Base64.parse(user.Authorization.split('.')[1]).toString(CryptoJS.enc.Utf8);sessionStorage.setItem('Authorization', state.Authorization);sessionStorage.setItem('user_message', state.user_message);sessionStorage.setItem('refresh_token', state.refresh_token);},DelToken(state){state.Authorization = '';sessionStorage.clear();},

vue的token刷新处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Source Code Library 源代码收集器

对于程序员来说&#xff0c;收集、整理一些常用的源代码是经常性的工作&#xff0c;但很多时候&#xff0c;随着收集的代码、文档、压缩包的增长&#xff0c;也会产生另一个问题&#xff1a;那就是如何快速找到所需要的内容。 这个问题曾经困扰着我&#xff0c;后来我开始使用&…

VC2010如何给ActiveX添加事件

利用VC开发ActiveX时&#xff0c;需要给控件添加标准事件或自定义事件&#xff0c;在VC6中有多种方法&#xff1a; 一、按Ctrl W 打开类向导&#xff0d;&#xff1e;切换到“ActiveX Events"&#xff0d;&#xff1e;Add Event...&#xff0c;如图&#xff1a; 二、右…

css动态设置宽高

css 中可以使用 calc() 来动态设置宽高&#xff0c;但是&#xff0c;在表达式中运算符的前后必须要有空格 height:calc(100vh - 80px);

Windows Runtime (RT)

学了sl for wp 开发了1年都没入门&#xff0c;只能说自己的学习欲望太低了。 今天偶然才发现wrt 跟 .net 是2个东西... orz。 得抛弃 sl &#xff0c;wrt才是未来的主流吧... 这篇文章不错 http://www.dotblogs.com.tw/regionbbs/archive/2011/09/18/introducing.windows.runti…

产业链没有阴谋

IBM将PC甩给联想&#xff0c;是IBM的产业链阴谋吗&#xff1f;上个星期在客户的研讨会上有人这样问我。提问的这位朋友刚刚看过郎咸平的《产业链阴谋》&#xff0c;认为我们之所以处于“6 1”的低端&#xff0c;就是中了跨国公司的诡计&#xff0c;他们想进入高端&#xff0c;…

CSS中height:100%和height:inherit的异同

1. height:100%和height:inherit的异同 1.1 兼容性差异 height:100% IE6 √ height:inherit IE8 √ 1.2 大多数情况作用是一样的 除去兼容性&#xff0c;大多数情况下&#xff0c;两者作用是一样的&#xff0c;甚至都很难想出不一样的理由 父容器height: auto&#xff0c…

手机端双击页面放大的问题

制作手机端页面的时候我们都会加入一个meta标签&#xff0c; 该meta标签的作用是让当前viewport的宽度等于设备的宽度&#xff0c;同时不允许用户手动缩放。 其中 maximum-scale为允许用户的最大缩放值&#xff0c;user-scalable为是否允许用户进行缩放&#xff0c;yes(默认)…

cxxtest单元测试框架源码分析(二):所有对外功能实现分析

CxxTest的大部分诊断功能都是通过宏定义实现的&#xff0c;而且这部分的定义以及所有测试套的基类CxxTest:TestSuite定义和实现都在TestSuite.h和TestSuite.cpp里面。下面我们将通过分析这两个文件来分析CxxTest的对外功能体现。 1 //所有的类以及定义都是在CxxTest名称空间中2…

Interlocked.CompareExchange

class SourceManager { private SourceManager() { } private static SourceManager sourceManager; public static SourceManager Instance { get { if (sourceManager null) { /* lock 实现方式 功能与以下 Interlocked.CompareExchange 相同 lock (this) { if (sourceManag…

Dos下删除(非)空目录或文件

【删除非空文件夹】&#xff1a; 在xp中的虚拟dos也就是开始运行cmd啦&#xff0c;是可以输入中文的&#xff0c;要删除非空文件夹请用rmdir /s /q命令 删除非空目录&#xff1a;RMDIR [/S] [/Q] [drive:]path 删除空目录&#xff1a;RD [/S] [/Q] [drive:]path /S 除目录本…

absolute元素在text-align属性下的对齐显示

1. absolute元素是否可以响应text-align属性&#xff1f; 众所周知&#xff0c;text-align属性可以有效作用于inline/inline-block水平的元素&#xff0c;那么应用了position:absloute/fixed声明的元素呢&#xff1f; 上面效果中的图片就是应用了position: absolute声明&#…

vue-cli proxy中跨域中pathRewrite配置理解

1. vue本地项目调试线上接口出现跨域问题 2. 通过在 config/index.js 配置文件中找到proxyTable配置项 dev: {// PathsassetsSubDirectory: static,assetsPublicPath: /,proxyTable: {/api: {target: http://XX.XX.XX.XX:8083,changeOrigin: true,pathRewrite: {^/api: /api …

CSS3选择器:nth-child和:nth-of-type之间的差异

1. 深呼吸&#xff0c;直接内容 :nth-child和:nth-of-type都是CSS3中的伪类选择器&#xff0c;其作用近似却又不完全一样&#xff0c;对于不熟悉的人对其可能不是很区分&#xff0c;本文就将介绍两者的不同&#xff0c;以便于大家正确灵活使用这两类选择器 先看一个简单的实例…

php第一节

一.关于PHP的基本介绍 1.PHP [HyperText perprocessor] : 超文本预处理程序。php是一种动态网站后台技术&#xff0c;是一种解释性的脚本语言。2.php的运行环境&#xff1a;(可分两种)LAMP&#xff1a;Linux Apache MySQL PHPWAMP&#xff1a;Windows Apache My…

CSS3中的display:grid网格布局介绍

1.网格布局(grid): 它将网页划分成一个个网格&#xff0c;可以任意组合不同的网格&#xff0c;做出各种各样的布局; 2.基本概念&#xff1a; 容器和项目&#xff0c;如图所示&#xff1a; <div class"content"><div class"b">1</div>&…

文件逆顺输出到新文件(三种方案)

方法一:利用递归 /*功能&#xff1a;文件以行为单位&#xff0c;逆顺输出到新文件示例&#xff1a;file1.txt为&#xff1a;123456要求逆顺后输出到文件file2.txt&#xff0c;结果为&#xff1a;563412*/#include <stdio.h> #include <string.h>// 递归读取文件 v…

js实现同时提交多个表单

http://www.jb51.net/article/17284.htm两种方法&#xff1a;1.使用ajax异步提交表单。方法简单&#xff0c;jQuery插件等都能实现。2.使用iframe。方法很原始&#xff0c;较麻烦。更多文章&#xff1a;实现同时提交多个form(基础方法) 收集-http://blog.csdn.net/elifefly/art…