|
|
@@ -31,8 +31,7 @@ try {
|
|
|
}
|
|
|
|
|
|
// 导出标志,供 axios 拦截器使用
|
|
|
-// ===== 关键:初始值设为 true,防止在认证完成前触发 401 跳转 =====
|
|
|
-export let isAuthenticating = true
|
|
|
+export let isAuthenticating = false
|
|
|
|
|
|
/**
|
|
|
* 从 URL 获取票据参数
|
|
|
@@ -157,14 +156,6 @@ export function getTicketFromUrl() {
|
|
|
console.log('⚠️ 票据解码失败,使用原始值:', e.message)
|
|
|
}
|
|
|
|
|
|
- // 处理票据中的换行符(统一认证门户返回的票据可能包含换行符)
|
|
|
- // 将真正的换行符转换为字面字符串 \n(与测试环境格式保持一致)
|
|
|
- const originalLength = ticket.length
|
|
|
- ticket = ticket.replace(/\r\n/g, '\\n').replace(/\n/g, '\\n').replace(/\r/g, '\\n')
|
|
|
- if (ticket.length !== originalLength) {
|
|
|
- console.log('🔄 已转换票据中的换行符为字面字符串,原长度:', originalLength, '新长度:', ticket.length)
|
|
|
- }
|
|
|
-
|
|
|
console.log('🔍 === 票据获取成功 ===')
|
|
|
return ticket
|
|
|
}
|
|
|
@@ -310,11 +301,20 @@ export async function processTicket(ticketData) {
|
|
|
try {
|
|
|
console.log('🔍 正在处理票据...')
|
|
|
console.log('📡 请求接口:', TICKET_PROCESS_API)
|
|
|
- console.log('📦 票据数据长度:', ticketData.length)
|
|
|
- console.log('📦 票据前100字符:', ticketData.substring(0, 100))
|
|
|
+ console.log('📦 原始票据数据长度:', ticketData.length)
|
|
|
+
|
|
|
+ // 清理票据中的换行符(base64编码的票据可能包含换行符)
|
|
|
+ let cleanTicket = ticketData
|
|
|
+ .replace(/\r\n/g, '') // 移除 Windows 换行符
|
|
|
+ .replace(/\n/g, '') // 移除 Unix 换行符
|
|
|
+ .replace(/\r/g, '') // 移除回车符
|
|
|
+ .trim() // 移除首尾空白
|
|
|
+
|
|
|
+ console.log('📦 清理后票据数据长度:', cleanTicket.length)
|
|
|
+ console.log('📦 票据前100字符:', cleanTicket.substring(0, 100))
|
|
|
|
|
|
const requestBody = {
|
|
|
- ticket_data: ticketData
|
|
|
+ ticket_data: cleanTicket
|
|
|
}
|
|
|
|
|
|
console.log('📤 发送请求...')
|