1.判断token实现,在axios.js请求拦截器里面,判断

import { getRefreshToken, isRefreshTokenExpired } from './format' //刷新token的接口与过期时间倒计时

  // if (token) {//有没有token
        //     isRefreshTokenExpired(resetTime);
        //     if (resetTime < 120) {//时间少于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;
        //          setLoginToLocal('');
        //          if(res.code == 20010) {
        //             // token过期
        
        //             router.push({
        //                 name: "/login"
        //             })
        //             Message({
        //                 message: res.message,
        //                 type: 'error',
        //                 center: true,
        //                 duration: 2 * 1000
        //             });
        //         }
        //     }
        // }
        
     
        // if (res.code == 20011) {
        //     if (getLoginToLocal()) {
        //         setLoginToLocal('');
        //         router.push({
        //             name: "/login"
        //         })
        //     }
        // } else if (res.code == 200102) {
        //     // token过期

        //     router.push({
        //         name: "/login"
        //     })
        //     Message({
        //         message: res.message,
        //         type: 'error',
        //         center: true,
        //         duration: 3 * 1000
        //     });
        // }
        // else {
        //     Message({
        //         message: res.message,
        //         type: 'error',
        //         center: true,
        //         duration: 5 * 1000
        //     });
        // }        

2.format.js

import axios from "axios";
// import base from '../base'; // 导入接口域名列表

export function getRefreshToken(token,key){
    // 刷新token 用到server
    return axios.get('/api/member/refreshToken',
    {
        headers: {
        'AccessToken': token,
        "AccessKey":key
    },
    })
    .then((res) => {
        return Promise.resolve(res.data)
    })
}
export function isRefreshTokenExpired(timestamp) {
    clearInterval(window.interval);
    window.interval = setInterval(()=>{
        if(timestamp>0){
            timestamp=timestamp-1
            sessionStorage.setItem('resetTime',timestamp)
        }
     
    },1000)
  }

此方法会存在问题,当刷新token函数和另一函数同时执行的时候,token还是去的刷新之前的值,所以会造成失效,在此只是记录下此思路

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐