web项目开发中2个Token原因解析及示例代码

 更新时间:2021年09月24日 15:52:50   作者:SpringSir  
这篇文章主要介绍了web项目开发中会出现2个Token原因的解析以及实现的示例代码,有需要的同学可以借鉴参考下,希望可以有所帮助

在这里插入图片描述

问题:

项目中2个Token, 一个时效2个小时(简称:短Token), 另一个时效14天(简称:长Token),
为什么要用2个Token?

解答:

1.基于安全性, 防止Token泄露的考虑, 服务器资源中所有的请求都只能使用短Token, 并且短Token只有2小时时效;

  •  这个方法依然无法完全解决防止Token泄露的问题, 只是在一定程度上提高防止Token泄露的安全性;
  • 长Token的作用只有一个, 就是短Token时效了的时候, 用长Token去请求获取新的短Token,

只有这个接口中, 才能用长Token发请求.

2.为了提高用户的体验, 不至于直接让用户退出正在操作的页面

import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import { getToken, setToken } from './token'
import router from '../router/index.js'
import { Toast } from 'vant'
Vue.use(VueAxios, axios)
const instance = axios.create({
  baseURL: '基地址',
  timeout: 100000
})
// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 统一添加token
    getToken() && (config.headers['Authorization']= `Bearer ${getToken().token}`)
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)
// 添加响应拦截器
/**
 * 1.if 401 else 不管
 * 2.if 有token else 跳转登录页
 * 3.try-catch 用 refresh_token 去获取 token, if 成功 else refresh_token失效了,跳转登录页
 * 4.保存获取的 token, 更新, 继续执行用户要的操作
 */
instance.interceptors.response.use(
  function (response) {
    return response
  },
  async function (error) {
    if (401 === error.response.status) {
      setTimeout('console.clear()', 2000)
      if (getToken()) {
        try {
          // 登录了, 但是短T过期, 用长T获取短T(刷新用户token)
          let res = await axios({
            url: '基地址/v1_0/authorizations',
            method: 'PUT',
            headers:{Authorization : `Bearer ${getToken().refresh_token}`}
          })
          // 更新短T
          let token = getToken()
          token.token = res.data.data.token
          setToken(token)
          // 继续用户操作
          return instance(error.config)
        } catch (error) {
          // 长T失效,跳转登录页
          Toast.fail('请先登录')
          router.push({ path: '/login' })
        }
      } else {
        // 未登录,跳转登录页
        Toast.fail('请先登录')
        router.push({ path: '/login' })
      }
    }
    return Promise.reject(error)
  }
)
export default instance

以上就是web项目开发中2个Token原因解析及示例代码的详细内容,更多关于web项目开发的资料请关注脚本之家其它相关文章!

相关文章

  • Vue内存泄漏的识别和解决方案

    Vue内存泄漏的识别和解决方案

    Vue是人气爆棚且地表最强的JS(JavaScript)框架,祂允许我们构建动态交互式的Web App,然但是,和任何软件雷同,Vue App偶尔会遭遇内存泄漏,导致性能暴跌和意外行为,今天,我们将深入Vue App内存泄漏的原因,并探讨识别和修复这些问题的锦囊妙计
    2023-11-11
  • Vue中的默认插槽详解

    Vue中的默认插槽详解

    在 Vue 中,插槽(Slot)是一种非常强大且灵活的机制,用于在组件中插入内容,默认插槽是在父组件中传递内容给子组件时使用的一种方式,这篇文章主要介绍了Vue中的默认插槽详解,需要的朋友可以参考下
    2024-01-01
  • Vue计算属性与监视(侦听)属性的使用深度学习

    Vue计算属性与监视(侦听)属性的使用深度学习

    这篇文章主要介绍了Vue计算属性与监视(侦听)属性的使用,计算属性指的是通过一系列运算之后,最终得到一个值,watch监视(侦听)器允许开发者监视数据的变化,从而针对数据的变化做特定的操作,本文就这两种属性给大家详细讲解,感兴趣的朋友一起学习吧
    2022-11-11
  • vue+elementUI中表格高亮或字体颜色改变操作

    vue+elementUI中表格高亮或字体颜色改变操作

    这篇文章主要介绍了vue+elementUI中表格高亮或字体颜色改变操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 如何使用yarn创建vite项目+vue3

    如何使用yarn创建vite项目+vue3

    这篇文章主要介绍了如何使用yarn创建vite项目+vue3,详细介绍了使用vite创建vue3过程,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • vue按需引入element Transfer 穿梭框

    vue按需引入element Transfer 穿梭框

    这篇文章主要介绍了vue按需引入element Transfer 穿梭框的相关资料,需要的朋友可以参考下
    2017-09-09
  • Vuejs中使用markdown服务器端渲染的示例

    Vuejs中使用markdown服务器端渲染的示例

    这篇文章主要介绍了Vuejs 中使用 markdown的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Vue条件循环判断+计算属性+绑定样式v-bind的实例

    Vue条件循环判断+计算属性+绑定样式v-bind的实例

    今天小编就为大家分享一篇Vue条件循环判断+计算属性+绑定样式v-bind的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue搭建后台系统需要注意的问题

    Vue搭建后台系统需要注意的问题

    这篇文章主要介绍了Vue搭建后台系统需要做的几点,文中给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Vue 3 + Element Plus树形表格全选多选及子节点勾选的问题解决方法

    Vue 3 + Element Plus树形表格全选多选及子节点勾选的问题解决方

    在本文中,我们解决了Vue 3和Element Plus树形表格中的全选、多选、子节点勾选和父节点勾选等常见问题,通过逐步实现这些功能,您可以构建功能强大且用户友好的树形表格组件,以满足各种数据展示需求,对Vue 3 Element Plus树形表格相关知识感兴趣的朋友一起看看吧
    2023-12-12

最新评论