可信代码库-生产环境token覆盖问题解决

This commit is contained in:
付民康
2025-07-17 11:02:19 +08:00
parent b8743716b5
commit 3a9fbbf5cc
24 changed files with 9493 additions and 82 deletions

View File

@@ -9,11 +9,11 @@ export function useAccount() {
if (!source) {
return;
}
const { access_token, refresh_token, xauth_token, ...userInfo } = source;
localStorage.setItem('access_token', access_token);
localStorage.setItem('refresh_token', refresh_token);
const { op_access_token, op_refresh_token, xauth_token, ...userInfo } = source;
localStorage.setItem('op_access_token', op_access_token);
localStorage.setItem('op_refresh_token', op_refresh_token);
localStorage.setItem('xauth_token', xauth_token);
localStorage.setItem('userInfo', JSON.stringify(userInfo));
localStorage.setItem('opUserInfo', JSON.stringify(userInfo));
if (cached) {
saveStatus(true);
saveAccountInfo(userInfo);
@@ -21,10 +21,10 @@ export function useAccount() {
};
const RemoveInfo = () => {
localStorage.removeItem('access_token');
localStorage.removeItem('refresh_token');
localStorage.removeItem('op_access_token');
localStorage.removeItem('op_refresh_token');
localStorage.removeItem('xauth_token');
localStorage.removeItem('userInfo');
localStorage.removeItem('opUserInfo');
localStorage.removeItem('validator_email');
localStorage.removeItem('visited_repo_list');
localStorage.removeItem('invite_link');

View File

@@ -129,7 +129,7 @@ export function useFormInteraction(currentForm: Ref<FormListProps[]>, flag: bool
};
/** 第三方登录 */
const handleAuthLogin = (type: 'csdn' | 'gitee' | 'github' | 'mobile', callback?: Function, returnUrl? :string) => {
if (localStorage.getItem('access_token')) {
if (localStorage.getItem('op_access_token')) {
callback?.();
} else {
if (type === 'mobile') {

View File

@@ -8,8 +8,8 @@ type UserInfo = {
}
export const useUserInfo = (): { userInfo: UserInfo; } => {
const userInfoStr = localStorage.getItem('userInfo');
const userInfoStr2 = sessionStorage.getItem('userInfo');
const userInfoStr = localStorage.getItem('opUserInfo');
const userInfoStr2 = sessionStorage.getItem('opUserInfo');
const userInfo: UserInfo = userInfoStr ? JSON.parse(userInfoStr) : userInfoStr2 ? JSON.parse(userInfoStr2) : {};
return {
userInfo

View File

@@ -118,7 +118,7 @@ export function getFilePath(hash: string, filetype: string): string {
export function getImageUrl(iam_id?: string, fileType: string = 'png', isAvatar: boolean = true) {
if (!iam_id) {
const accountInfo = JSON.parse(localStorage.getItem('userInfo') || '{}');
const accountInfo = JSON.parse(localStorage.getItem('opUserInfo') || '{}');
iam_id = accountInfo.iam_id;
}
if (isAvatar) {

View File

@@ -122,10 +122,10 @@ const refreshToken = async () => axios.request({
url: baseURL + `${(import.meta as any).env.VITE_PASSPORT_PREFIX || ''}` + '/api/v1/user/token/refresh',
method: 'post',
data: {
refresh_token: localStorage.getItem('refresh_token')
op_refresh_token: localStorage.getItem('op_refresh_token')
},
headers: {
Authorization: 'Bearer ' + localStorage.getItem('access_token'),
Authorization: 'Bearer ' + localStorage.getItem('op_access_token'),
'content-type': 'application/x-www-form-urlencoded'
},
withCredentials: true
@@ -135,10 +135,10 @@ const proxyService = (params: any, customConfigs?: CustomConfigs) => {
const account = useAccountStore();
const service = axios.create({
baseURL: params.apiType === 'devApi' ? baseDevURL : baseURL,
timeout: 60000,
timeout: 30000,
headers: {
'DP_TOKEN': account.accountInfo.access_token,
'DP_REFRESH_TOKEN': account.accountInfo.refresh_token,
'DP_TOKEN': account.accountInfo.op_access_token,
'DP_REFRESH_TOKEN': account.accountInfo.op_refresh_token,
},
withCredentials: true
});
@@ -181,10 +181,10 @@ const proxyService = (params: any, customConfigs?: CustomConfigs) => {
config.headers['gitcode-utm-source'] = encodeURIComponent(getSignUtmSource());
}
const access_token = window.localStorage.getItem('access_token');
const op_access_token = window.localStorage.getItem('op_access_token');
const { url } = config;
if (access_token && !notAuthorization(url)) {
config.headers.Authorization = `Bearer ${access_token}`;
if (op_access_token && !notAuthorization(url)) {
config.headers.Authorization = `Bearer ${op_access_token}`;
}
/** 修改用户模块前缀名称 */
config.url = setPassportPrefix(config.url as string, config.method as string);
@@ -213,23 +213,23 @@ const proxyService = (params: any, customConfigs?: CustomConfigs) => {
});
});
}
if (response?.status === 401 && localStorage.getItem('access_token') && !config?.url.includes('/token/refresh')) {
if (response?.status === 401 && localStorage.getItem('op_access_token') && !config?.url.includes('/token/refresh')) {
refreshing = true;
try {
const res = await refreshToken();
refreshing = false;
if (res.status === 200) {
const { access_token, refresh_token } = res.data;
localStorage.setItem('access_token', access_token);
localStorage.setItem('refresh_token', refresh_token);
const { op_access_token, op_refresh_token } = res.data;
localStorage.setItem('op_access_token', op_access_token);
localStorage.setItem('op_refresh_token', op_refresh_token);
queue.forEach(({ config, resolve }) => {
if (config.headers) {
config.headers.Authorization = `Bearer ${access_token}`;
config.headers.Authorization = `Bearer ${op_access_token}`;
}
resolve(axios(config));
});
queue.splice(0);
config.headers.Authorization = `Bearer ${access_token}`;
config.headers.Authorization = `Bearer ${op_access_token}`;
return axios(config);
} else {
handleError({}, true);

View File

@@ -36,10 +36,10 @@ export function showMessage(res: Record<string, any>, logout: boolean = false) :
// if (!failCode.includes(res.data.error_code.toString())) {
// message = res.data.error_message;
// }
emitEvent('logout', Boolean(localStorage.getItem('access_token')));
emitEvent('logout', Boolean(localStorage.getItem('op_access_token')));
break;
case 403:
if (localStorage.getItem('access_token')) {
if (localStorage.getItem('op_access_token')) {
emitEvent('forbiddenRefresh');
} else {
message = res.data.error_message;