zoukankan      html  css  js  c++  java
  • Vue刷新token,判断token是否过期、失效的最简便的方法

    刷新token和token是否过期的操作都是由后端实现,前端只负责根据code的不同状态来做不同的操作:

    一、判断token是否过期、失效

    举例:一般响应状态码 code :0,表示请求成功。①响应状态码 code:10010表示token过期 ②响应状态码 code:10011 表示token无效。这些状态码都由你自己和后端的同学一起定义。code等于10010和10011这两种状态都会跳转到登录页,重新进行登录并获取最新的token。

    二、在一定时间内刷新token

    为什么需要刷新token?因为出于安全性的考虑,一般是一天或几个小时更新token,看项目需要。

    怎么实现?我和后端的同学是这么定义的,在发送任何一次请求时,如果需要更新token,响应体中后端的同学给我返回了token这个字段,token出现在了响应体中,说明这时候是需要刷新token的(其他非刷新token的请求时是没有token字段的),这时用localStorage保存最新token,自动覆盖掉原来旧的token,这样下次再调用新接口时用的就是最新的token了,这样用户也感知不到token更新的过程。

     三、具体实现

    /**
    * 全局变量 和 设置 、配置等。。。
    */
     
    import axios from 'axios' // 引入axios
     
    import Storage from '@/assets/js/util/storage.js' // storage工具类,简单的封装
     
     
     
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
    
    /* 请求拦截器 */
     
    axios.interceptors.request.use(function (config) { // 每次请求时会从localStorage中获取token
     
        let token = Storage.localGet('token')
     
        if (token) {
        
            token = 'bearer' + ' ' + token.replace(/'|"/g, '') // 把token加入到默认请求参数中
     
            config.headers.common['Authorization'] = token
     
        }
     
        return config
     
    }, function (error) {
     
        return Promise.reject(error)
     
    })
    
    
    /* 响应拦截器 */
     
    axios.interceptors.response.use(function (response) { // ①10010 token过期(30天) ②10011 token无效
     
    if (response.data.code === 10010 || response.data.code === 10011) {
     
        Storage.localRemove('token') // 删除已经失效或过期的token(不删除也可以,因为登录后覆盖)
     
        router.replace({
     
            path: '/login' // 到登录页重新获取token
     
        })
     
    } else if (response.data.token) { // 判断token是否存在,如果存在说明需要更新token
     
        Storage.localSet('token', response.data.token) // 覆盖原来的token(默认一天刷新一次)
     
    }
     
        return response
     
    }, function (error) {
        return Promise.reject(error)
    })

    缓存工具类 Storage

    var Storage = {
        // ==================sessionsTorage设置缓存================
        // 设置缓存
        sessionSet: function (name, data) {
            sessionStorage.removeItem(name)
            sessionStorage.setItem(name, JSON.stringify(data))
        },
        // 获取缓存
        sessionGet: function (name) {
            return JSON.parse(sessionStorage.getItem(name))
        },
        // 清除缓存
        sessionRemove: function (name) {
            sessionStorage.removeItem(name)
        },
        // ==================localStorage设置缓存==================
        // 设置缓存
        localSet: function (name, data) {
            localStorage.removeItem(name)
            localStorage.setItem(name, JSON.stringify(data))
        },
        // 获取缓存
        localGet: function (name) {
            return JSON.parse(localStorage.getItem(name))
        },
        // 清除缓存
        localRemove: function (name) {
            localStorage.removeItem(name)
        }
     
    }
     
    export default Storage
  • 相关阅读:
    华为机试测试- 最小公倍数
    华为机试测试- 字符串最长的数字串
    华为机试测试- 大数相加
    Java 字符串倒序
    java BigDecimal
    华为机试测试-验证尼科彻斯定理
    华为机试测试-矩阵乘法-循环
    JAVA使用脚本引擎执行JS
    javascript学习之位置获取
    javascript学习笔记之DOM
  • 原文地址:https://www.cnblogs.com/zhaosijia----1234/p/10519896.html
Copyright © 2011-2022 走看看