ktianc ff56a184ca 版本升级:
1. 修复(kinit-admin):页面缓存问题修复
2. 更新(kinit-api,kinit-admin):菜单管理新增是否缓存字段
3. 更新(kinit-admin):将缓存默认存储在localStorage中
4. 更新(kinit-api):将python-jose库更换为pyjwt库
5. 优化(kinit-admin,kinit-uni):退出登录方法优化
6. 优化(kinit-admin,kinit-uni):response拦截优化
7. 新增(kinit-api,kinit-admin,kinit-uni):jwt到期时间缩短,加入刷新token功能
8. (kinit-uni)切换到 vscode 开发 uniapp 项目
2023-03-13 14:34:26 +08:00

128 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import luchRequest from '@/components/luch-request' // 使用npm
import config from '@/config.js'
import errorCode from '@/common/request/errorCode'
import { getToken, getRefreshToken, setToken, setRefreshToken } from '@/common/utils/auth'
import { toast } from '@/common/utils/common'
import store from '@/store'
import request from '@/common/request/request.js'
// luch-request插件官网https://www.quanzhan.co/luch-request/guide/3.x/#%E5%85%A8%E5%B1%80%E8%AF%B7%E6%B1%82%E9%85%8D%E7%BD%AE
// 创建luchRequest实例
const http = new luchRequest({
baseURL: config.baseUrl,
timeout: 20000, // 请求超时时间
dataType: 'json',
custom: {
loading: true
}
})
// 请求拦截器
http.interceptors.request.use(
(config) => {
// 在发送请求之前
let token = getToken()
if (token) {
// 添加头信息token验证
config.header['Authorization'] = token
}
return config
},
(error) => {
return Promise.reject(error)
}
)
// 响应拦截器
http.interceptors.response.use(
(res) => {
// console.log("响应拦截器:", res)
// 未设置状态码则默认401状态
const code = res.data.code || 200
// 获取错误信息
const msg = res.data.message || errorCode[code] || errorCode['default']
// 是否刷新token
const refresh = res.data.refresh || false
if (code === 500) {
toast(msg)
return Promise.reject(new Error(msg))
} else if (code === 401) {
// 因token快过期刷新token
refreshToken().then((res) => {
setToken(`${res.data.token_type} ${res.data.access_token}`)
setRefreshToken(res.data.refresh_token)
})
toast('操作失败,请重试')
return Promise.reject('error')
} else if (code !== 200) {
toast(msg)
return Promise.reject('error')
} else if (code === 200) {
if (refresh) {
// 因token快过期刷新token
refreshToken().then((res) => {
setToken(`${res.data.token_type} ${res.data.access_token}`)
setRefreshToken(res.data.refresh_token)
})
}
return res.data
} else {
return res.data
}
},
(error) => {
console.log('err', error)
let message = error.data.message || error.errMsg
const status = error.statusCode
switch (status) {
case 400:
message = '请求错误'
break
case 401:
// 强制要求重新登录因账号已冻结账号已过期手机号码错误刷新token无效等问题导致
store.dispatch('auth/LogOut')
message = '未认证,请登录'
break
case 403:
message = '拒绝访问'
break
case 404:
message = '请求地址出错'
break
case 408:
message = '请求超时'
break
case 500:
message = '服务器内部错误'
break
case 501:
message = '服务未实现'
break
case 502:
message = '网关错误'
break
case 503:
message = '服务不可用'
break
case 504:
message = '网关超时'
break
case 505:
message = 'HTTP版本不受支持'
break
default:
break
}
toast(message)
return Promise.reject(error)
}
)
// 刷新 token
function refreshToken() {
const data = JSON.stringify(getRefreshToken())
return request.post('/auth/token/refresh/', data)
}
export default http