无感知刷新操作(对token的过期失效理)

无感知刷新操作(对token的过期失效理)

// 第二种axios的无痛刷新 --- 设置在aixos响应拦截器中
instance.interceptors.response.use(function(response) {
    return response
}, async function(error) {
    if(error.response && error.response.status === 401) {
        // 取到存入本地的refresh_token信息
        const refreshToken = store.state.userToke.refresh_token
        try {
        // 拿着这个 refresh_token 重新发送一次请求,去生成新的token信息
        const result = await axios({
            method: 'PUT',
            url: 'http://toutiao-app.itheima.net/v1_0/authorizations',
            headers: {
                Authorization: `Bearer ${refreshToken}`
            }
        })
        // console.log(result.data.data); // 一个对象只有一个token信息
        // 保存生成的新的token信息  token + refresh_token 是个对象
        const newToken = result.data.data.token
        // 调用vuex保存新token  --- 更新 新token
        store.commit('setToken', {
            refresh_token : newToken,
            token: newToken
        })
        // 以  **之前的参数+新的token信息**  重新发起一次请求A
        // error.config: 缓存了请求A接口之前的参数
        // 这里是使用我们更新之前修改token信息之后导致发送的请求残生401的错误代码,导致请求失败,这里我们调用原来的请求信息,
        // 但是使用新的token,重新在发起一次一模一样的请求,去替换原来的发生错误的请求
        return instance(error.config) 

        } catch {  // 使用refreshToken请求失败 -- 清空vuex内的token信息
            // 清空vuex中的token
            store.commit('delToken')
            // 路由跳转,进入登陆页  --- 这里跳转引入了 router文件才能发生跳转
            router.push({
                path: '/login',
                query: {
                    // currentRoute: 表示当前的路由
                    backto: router.currentRoute.fullPath
                }
            })
        }     
    }
})



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值