Token 是用户登录成功之后服务端返回的一个身份令牌,在项目中的多个业务中需要使用到:

  • 访问需要授权的 API 接口
  • 校验页面的访问权限

但是我们只有在第一次用户登录成功之后才能拿到 Token。

所以为了能在其它模块中获取到 Token 数据,我们需要把它存储到一个公共的位置,方便随时取用。

往哪儿存?

  • 本地存储

    • 获取麻烦
    • 数据不是响应式
  • Vuex 容器(推荐)

    • 获取方便
    • 响应式的
  • 登录成功,将 Token 存储到 Vuex 容器中

    • 获取方便
    • 响应式
  • 为了持久化,还需要把 Token 放到本地存储

    • 持久化

关于 Token 过期问题

登录成功之后后端会返回两个 Token:

  • token:访问令牌,有效期2小时
  • refresh_token:刷新令牌,有效期14天,用于访问令牌过期之后重新获取新的访问令牌

我们的项目接口中设定的 Token 有效期是 2 小时,超过有效期服务端会返回 401 表示 Token 无效或过期了。

为什么过期时间这么短?

  • 为了安全,例如 Token 被别人盗用

过期了怎么办?

  • 让用户重新登录,用户体验太差了
  • 使用 refresh_token 解决 token 过期

服务器生成token的过程中,会有两个时间,一个是token失效时间,一个是token刷新时间,刷新时间肯定比失效时间长,当用户的 token 过期时,你可以拿着过期的token去换取新的token,来保持用户的登陆状态,当然你这个过期token的过期时间必须在刷新时间之内,如果超出了刷新时间,那么返回的依旧是 401。

处理流程:

  1. 在axios的拦截器中加入token刷新逻辑
  2. 当用户token过期时,去向服务器请求新的 token
  3. 把旧的token替换为新的token
  4. 然后继续用户当前的请求

token的原理及过期处理相关推荐

  1. 高性能分布式缓存redis(持久化原理 安全策略 过期删除内存淘汰策略 性能压测 高可用 Redis Cluster)

    redis redis(持久化原理 安全策略 过期删除&内存淘汰策略 性能压测 高可用 Redis Cluster) 1. 持久化原理 1.1 持久化流程(落盘) 1.2 RDB详解 1.2. ...

  2. token系统讲解及过期处理

    token系统讲解及过期处理 1. token是什么?用来做什么 2. token存储在哪?过期了怎么办? 3. 请求拦截与响应拦截执行时机(面试重点) 4. 解决token过期方案一: `重新登录` ...

  3. c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间

    相信大家在很多业务场景都会遇到对数据设置过期时间,如安全认证token.短信验证码等.一般我们的解决有几种:存redis.存数据库.实时计算(如JWT),不管使用哪种方式,需求就是过期了对数据的清理. ...

  4. struts2令牌(token)内部原理

    小菜最近接触了struts2中的令牌知识,由于该知识点比较重要,因此想弄明白些,于是满怀信心的上网查阅资料,结果让小菜很无奈,网上的资料千篇一律,总结出来就一句话:"访问页面时,在页面产生一 ...

  5. 本地测试如何让token在有效内过期方法

    先登录,将token存储在cookie里,然后编辑一下token,随便删除一个字段,token就不存在(过期)了,即可.

  6. Token登录原理分析

    Token 是在服务端产生的.如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 Token 给前端.前端可以在每次请求的时候带上 Token 证明自己的合法地位. Toke ...

  7. 通过一个简单的例子学习Angular Injection Token工作原理

    源代码: const BASE_URL = new InjectionToken<string>('BaseUrl');const injector = Injector.create({ ...

  8. Token Bucket原理

    令牌桶是对通信流中数据进行调节的设备,调节器可以是policy或shaping.令牌桶没有丢弃优先级的策略,相反,令牌桶丢弃令牌,并当数据流超过预定义阀值时,对传输队列进行流量管理. 原理: 1.令牌 ...

  9. JWT token生成原理

    token生成规则: JWT包含三部分:Header(头部),Payload(负载),Signature(签名) //Signature生成 var encodedString = base64Url ...

最新文章

  1. 阿里云nginx配置ssl证书
  2. javascript弹出窗口居中代码
  3. SSM学习(一)Mybatis
  4. MyBatis之PageHelper分页操作
  5. 推荐15个 JavaScript 和 CSS 库
  6. 企业咨询:常用分析和咨询方法列表
  7. 看图工具—IrfanView
  8. JAVA学习-JAVA实现1-100的累加
  9. html根据菜单角色配置菜单代码,CSS设置列表样式和创建导航菜单实现代码
  10. 大二物竞金牌转北大计算机,物理竞赛保送去北大还是清华?
  11. NodeJs之npm
  12. [搜片神器]服务器SQL2005查询分页语句你理解了么
  13. 2018尚硅谷Git和GitHub视频教程
  14. Axure9学习笔记1:介绍及安装
  15. Mugeda(木疙瘩)H5案例课—足球小游戏-岑远科-专题视频课程
  16. 【SQL】小CASE
  17. arcgis engine已知图幅号获取比例尺
  18. SMILES学习笔记
  19. 【微信开发|PHP】设置关注自动回复,关键词自动回复。
  20. 最强计算机游戏,这可能是市面上体积最小性能最强的游戏主机了

热门文章

  1. 最新网站外链建设方法大全!
  2. 网站导航:如何在线生成自定义的二维码?(要美观不要俗气)
  3. 四氧化三铁负载石墨烯复合物/氧化石墨烯-四氧化三铁纳米颗粒/稻壳基炭负载纳米四氧化三铁颗粒
  4. 计算机科学与技术有哪些证书,计算机科学与技术在职研究生的证书有哪些?
  5. nnDetection复现Luna16 附模型
  6. mysql 获取数据库中最大的日期
  7. html查询一张表,HTML5数据查询,表格显示功能代码教程
  8. 第七周任务-各种星号图
  9. 读《时间管理:如何充分利用你的24小时》笔记
  10. B5G毫米波通信无线接入网络的架构设计