u
This commit is contained in:
1 parent
83cbf18572
commit
5ca04f85ca
32 files changed
+1308
-1804
No files matched your search
@@ -1,5 +1,6 @@
|
||||
import type { Method } from 'alova'
|
||||
import type { AxiosError } from 'axios'
|
||||
import type { ListUserSpacesResult } from '@/types/user'
|
||||
import { axiosRequestAdapter } from '@alova/adapter-axios'
|
||||
import { createAlova } from 'alova'
|
||||
import { useNavStore } from '@/store/navigation'
|
||||
@@ -11,12 +12,13 @@ enum HttpCode {
|
||||
Success = 200,
|
||||
Unauthorized = 401,
|
||||
Fail = 500,
|
||||
ErrSpaceRequired = 501,
|
||||
ErrSpaceNoPermission = 502,
|
||||
}
|
||||
|
||||
// 仅保留「无需登录」接口
|
||||
const WhiteList = [
|
||||
'/auth/login/**',
|
||||
'/auth/register/**',
|
||||
]
|
||||
|
||||
function isWhiteListed(url: string) {
|
||||
@@ -30,14 +32,14 @@ function isWhiteListed(url: string) {
|
||||
}
|
||||
|
||||
const alovaInstance = createAlova({
|
||||
// baseURL: 'http://192.168.5.6:8086/app',
|
||||
baseURL: 'http://192.168.1.137:8086/app',
|
||||
baseURL: 'http://192.168.5.6:8086/app',
|
||||
// baseURL: 'http://192.168.1.137:8086/app',
|
||||
requestAdapter: axiosRequestAdapter(),
|
||||
timeout: 5000,
|
||||
cacheFor: null,
|
||||
|
||||
responded: {
|
||||
onSuccess: async (response, _method: Method) => {
|
||||
onSuccess: async (response, method: Method) => {
|
||||
const resData = response.data as ResponseData<any>
|
||||
|
||||
const result = {
|
||||
@@ -45,17 +47,28 @@ const alovaInstance = createAlova({
|
||||
isSuccess: resData.code === HttpCode.Success,
|
||||
}
|
||||
|
||||
/**
|
||||
* 登录态失效:
|
||||
* - 清空本地状态
|
||||
* - 跳转登录页
|
||||
* - 不做 token 刷新、不重试请求
|
||||
*/
|
||||
if (resData.code === HttpCode.Unauthorized) {
|
||||
useUserStore.getState().clear()
|
||||
useNavStore.getState().navigateToAuth()
|
||||
return Promise.reject(new Error('登录已失效'))
|
||||
}
|
||||
else if (resData.code === HttpCode.ErrSpaceRequired || resData.code === HttpCode.ErrSpaceNoPermission) {
|
||||
if (method.meta?.spaceRetried)
|
||||
return Promise.reject(new Error('space retry failed'))
|
||||
|
||||
method.meta = { ...method.meta, spaceRetried: true }
|
||||
|
||||
const res = await alovaInstance.Post<ResponseData<ListUserSpacesResult>>('/user/spaces').send()
|
||||
if (!res.isSuccess || res.data.spaces.length === 0)
|
||||
return Promise.reject(new Error('没有可用空间,请刷新后再试'))
|
||||
|
||||
const defaultSpace = res.data.spaces[0]
|
||||
|
||||
useSpaceStore.getState().setUserSpace(defaultSpace)
|
||||
|
||||
method.config.headers['X-Space-Id'] = defaultSpace.id
|
||||
return method.send()
|
||||
}
|
||||
|
||||
return result
|
||||
},
|
||||
@@ -111,12 +124,12 @@ const alovaInstance = createAlova({
|
||||
}
|
||||
|
||||
// 注入 JWT
|
||||
method.config.headers.token = userStore.userInfo!.token
|
||||
method.config.headers.Token = userStore.userInfo!.token
|
||||
|
||||
// 注入 space 信息(如果存在)
|
||||
const userSpace = useSpaceStore.getState().userSpace
|
||||
if (userSpace) {
|
||||
method.config.headers['x-space-id'] = userSpace.space_id
|
||||
method.config.headers['X-Space-Id'] = userSpace.id
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
Reference in new issue
Block a user