fix: 修复Docker环境下登录跳转失败问题

## 问题描述
在Docker容器环境中,用户登录成功后无法正常跳转到目标页面,而直接运行的前端可以正常跳转。
表现为:登录成功提示显示为红色错误样式,且不会执行页面跳转。

## 根本原因
Docker构建时缺少关键环境变量配置,导致前端无法正确判断后端响应的成功状态:
- VITE_SERVICE_SUCCESS_CODE 在构建时为 undefined
- isBackendSuccess 判断失败:String(200) === undefined → false
- 成功的登录响应被错误地当作失败处理

## 修复内容

### 1. 修复Docker环境变量配置 (Dockerfile.prod)
- 添加 VITE_SERVICE_SUCCESS_CODE=200
- 添加 VITE_SERVICE_LOGOUT_CODES=600,401
- 添加 VITE_SERVICE_MODAL_LOGOUT_CODES=401
- 添加 VITE_SERVICE_EXPIRED_TOKEN_CODES=40101

### 2. 修复refreshToken处理 (auth/index.ts)
- 处理后端只返回token,没有refreshToken的情况
- 避免存储undefined到localStorage

### 3. 添加调试日志 (request/index.ts)
- 在isBackendSuccess中添加调试输出
- 便于后续问题排查

## 测试验证
- ✅ Docker环境登录跳转正常
- ✅ 成功提示显示为绿色
- ✅ 登录后正确跳转到目标页面
- ✅ 不影响非Docker环境的正常功能

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
This commit is contained in:
BrunoGao
2025-09-07 00:07:20 +08:00
co-authored by Claude
parent 449c256899
commit 342f9958aa
3 changed files with 14 additions and 2 deletions
+5
View File
@@ -36,6 +36,11 @@ ENV VITE_HTTP_PROXY=Y
ENV VITE_SERVICE_BASE_URL=/proxy-default
ENV VITE_BIGSCREEN_URL=/proxy-default
ENV VITE_OTHER_SERVICE_BASE_URL='{"demo": "/proxy-default"}'
# 添加缺失的关键环境变量
ENV VITE_SERVICE_SUCCESS_CODE=200
ENV VITE_SERVICE_LOGOUT_CODES=600,401
ENV VITE_SERVICE_MODAL_LOGOUT_CODES=401
ENV VITE_SERVICE_EXPIRED_TOKEN_CODES=40101
# 构建生产版本
RUN pnpm run build
+7 -1
View File
@@ -71,7 +71,13 @@ export const request = createFlatRequest<App.Service.Response, RequestInstanceSt
isBackendSuccess(response) {
// when the backend response code is "0000"(default), it means the request is success
// to change this logic by yourself, you can modify the `VITE_SERVICE_SUCCESS_CODE` in `.env` file
return String(response.data.code) === import.meta.env.VITE_SERVICE_SUCCESS_CODE;
const success = String(response.data.code) === import.meta.env.VITE_SERVICE_SUCCESS_CODE;
console.log('[Request] isBackendSuccess check:', {
responseCode: response.data.code,
expectedCode: import.meta.env.VITE_SERVICE_SUCCESS_CODE,
success
});
return success;
},
async onBackendFail(response, instance) {
const authStore = useAuthStore();
+2 -1
View File
@@ -98,7 +98,8 @@ export const useAuthStore = defineStore(SetupStoreId.Auth, () => {
async function loginByToken(loginToken: Api.Auth.LoginToken) {
// 1. stored in the localStorage, the later requests need it in headers
localStg.set('token', loginToken.token);
localStg.set('refreshToken', loginToken.refreshToken);
// 修复:如果后端没有返回refreshToken,则使用空字符串
localStg.set('refreshToken', loginToken.refreshToken || '');
// 2. get user info
const pass = await getUserInfo();