vue中对token的有效期的理解

保持登录是每个web页面必须要做的,不能一直不停的让用户进行登录,也不能让用户不登录就直接进入页面。token在保持登录中起到了非常重要的作用,我之前写过一篇博客,vue存储和使用后端传递过来的token,这篇博客详细的说明了后端如何向前端传递token,前端如何将token保存在localstorage中,并通过请求拦截的方式判断token是否过期。我不确定这么写是否真的能起到作用,因为我后面写代码的时候,我发现我后端明明设定的token的有效期是10个小时,而本地localstorage中还一直有这个token并没有清除。于是想了个办法,在路由守卫这个环节设置token的有效期,并进行验证。记录一下。

前端新设置一个token的有效期

代码写在路由处理文件中(router/index.js)

// 路由守卫
import jwt_decode from 'jwt-decode'
router.beforeEach((to, from, next) => {const EXPIRESTIME = 86400  const isLogin = localStorage.mytoken ? true : false;if (isLogin){const decode = jwt_decode(localStorage.mytoken)const date = parseInt(new Date().getTime() / 1000)if ((date - decode.iat) > EXPIRESTIME){localStorage.removeItem('mytoken')next("/login");}}if (to.path == "/login" || to.path == "/register") {next();} else {isLogin ? next() : next("/login");}
});

上面的代码可以看出,我设定了一个有效期EXPIRESTIME = 86400,也就是246060一天的时间

如果本地存储了token的话,我就对这个token进行解码,获得这个token的创建时间iat,并与当前时间new Date().getTime()进行比较,注意这里有个坑,当前时间是int型数据,单位是毫秒,而iat虽然也是int型数据,但单位是,所以我把当前时间除以1000再比较

如果超过了这个有效期,就清除这个token,然后重定向至登录页面

后面的路由守卫比较简单,就是正常的放行规则了

仍然使用后端token的有效期

我想来想去,还是觉得上面的思路有点不正常

既然后端已经设置了有效期,为啥前端还要这么操作呢,可能自己对全栈的理解还是不到位,我又重新看了一下自己大半个月前写的那篇博客,我觉得这个做法应该是科学可行的,还是把代码上上来

import axios from "axios";
import { Message, Loading } from 'element-ui';
import router from "./router"let loading;
function startLoading(){loading = Loading.service({lock: true,text: '数据加载中',background: 'rgba(0,0,0,0.7)'})
}function endLoading(){loading.close();
}// 请求拦截
axios.interceptors.request.use(config => {startLoading();if(localStorage.eleToken){// 设置统一的请求头config.headers.Authorization = localStorage.eleToken}return config
}, error => {return Promise.reject(error)
})//响应拦截
axios.interceptors.response.use(response => {endLoading();return response
}, error => {// 错误提醒endLoading();Message.error(error.response.data)// 获取错误状态码const {status} = error.responseif(status == 401){Message.error("token失效,请重新登录")localStorage.removeItem('eleToken')router.push('/login')}return Promise.reject(error)
})export default axios

这个代码相当于是对axios进行了二次封装,有很重要的两点:

  1. 请求拦截时,把token写进请求头中
  2. 页面响应时,判断token是否失效,失效的状态码为401,一旦监测到出现了401的错误码,就说明token过期了,删除、重定向

我懒得去验证这是不是正确的了,但是我觉得应该没啥问题

大前端写的还真是焦头烂额。。。

vue中对token的有效期的理解相关推荐

  1. Vue中 $attrs、$listeners使用和理解

    前言 提示:Vue中 常见的组件通信方式可分为三类: 父子通信 通常父子传值都是 通过prpos,子组件通过events接收 通过父链/子链 通信($parent/$chldren); ref也可以访 ...

  2. 面试官:Vue中组件和插件有什么区别?

    一.组件是什么 回顾一下对组件的定义: 组件就是把图形.非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度 ...

  3. vue中App.vue的主要作用

    app.vue中不但可以当做是网站首页,也可以写所有页面中公共需要的动画或者样式.不在上面写代码也可以. app.vue是主组件,是页面入口文件,是vue页面资源的首加载项.所有的页面都是在app.v ...

  4. vue里面的token是什么

    在vue中,token的意思是"令牌",是服务端生成的字符串,是客户端进行请求的一个标识:当用户第一次登录后,服务端生成一个token并返回给客户端,以后客户端只需要带着token ...

  5. vue项目将token存在(vuex)store和localstorage中

    文章目录 一.准备工作和token 1.准备工作 2.介绍token用法 二.创建storage,store,request 1.src目录: 2.封装storage(可选) 3.创建store 4. ...

  6. vue中axios如何实现token验证

    title: vue中axios如何实现token验证 date: 2018-02-08 17:50:07 tags: [axios,vue] 继上篇实现Auth认证之后,然后每个跳转页面都会在后端验 ...

  7. 深刻理解Vue中的组件

    今天看了下Vue官网上关于组件的教程,感觉内容还挺多,现在把组件中基本的知识梳理一下. 组件的基本使用 注册组件 注册组件就是利用Vue.component()方法,先传入一个自定义组件的名字,然后传 ...

  8. vue中的组件导航守卫,个人理解

    vue中组件导航守卫 beforeRouteEnter beforeRouteUpdate (2.2 新增) beforeRouteLeave 今天有遇到一个问题,就是在一个页面 新增模块按钮 和 编 ...

  9. vue中config/index.js:配置的详细理解

    当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面  (环境变量及其基本变量的配置) 1 2 3 4 5 6 7 8 9 10 11 12 ...

最新文章

  1. 三、临时弹出一个QQ对话窗口
  2. 计算机组成原理——知识结构体系
  3. Android应用实例收藏管理
  4. CodeForces 546B
  5. python迷宫算法及实现_Python迷宫递归算法
  6. proteus8.9安装教程
  7. houdini安装哪个linux版本,Houdini18.5安装系统环境要求
  8. TopoDOT | 基于三维激光LiDAR点云数据自动提取三维矢量特征信息——道路横断面
  9. 北方经贸杂志北方经贸杂志社北方经贸编辑部2022年第10期目录
  10. 三维模型格式转换神器-assimp
  11. java查重精确算法_一个查重算法的多种实现思路
  12. 北大计算机专业毕业论文,北京大学计算机专业硕士
  13. 古天乐一哭,电影宣传又跪了下来
  14. VPS云主机是什么?有什么优势?
  15. 笑话大全API 实战项目 开心一笑app
  16. 专升本-计算机公共课考点(3)——字处理软件Word 2010
  17. UVA 10635 Prince and Princess
  18. 艺赛旗RPA验证码处理系列(一):解决滑动加文字识别验证码
  19. Linux的obj文件,【IOS开发】linux 下安装object-c环境。。(初期学习的时候用)
  20. 第23节--python创建网页

热门文章

  1. 使用Java语言打印一个爱心图案
  2. 【CTF题】使用文件包含漏洞读取网页代码
  3. HTTP接口测试工具及使用
  4. 富格林金业:贵金属投资的优势体现在哪里
  5. Kettle【实践 01】Linux环境下使用Azkaban定时调用Kettle的KJB或KTR脚本实现自动化数据处理(完整流程实例分享:包含sql+ktr+shell+flow相关文件云资源)
  6. 第十四章 使用者的特殊 shell 与 PAM 模块
  7. 华为日志服务器文档,华为日志服务器配置
  8. TMI8150芯片驱动开发
  9. sublime3注册机使用
  10. 在进化计算中,软件进行元基编码的新陈代谢方式 V0. 1. 1