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:
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user