Kamixitong/DOMAIN_DEPLOYMENT_FIX.md
2025-11-22 20:32:49 +08:00

3.5 KiB
Raw Blame History

域名部署登录问题修复指南

问题分析

在通过域名访问系统时出现的登录400错误主要源于以下几个问题

  1. CSRF令牌验证失败跨域请求时CSRF令牌可能无法正确传递
  2. Cookie域配置问题会话Cookie的域配置可能与实际访问域不匹配
  3. HTTPS/HTTP协议不匹配Cookie安全标志配置错误
  4. CORS配置不完整:跨域资源共享配置不充分

修复措施

1. 环境配置调整

更新 .env 文件中的会话配置:

# 会话配置 - 根据实际协议调整
# 如果使用HTTPS设置为True如果使用HTTP设置为False
SESSION_COOKIE_SECURE=False
SESSION_COOKIE_HTTPONLY=True
SESSION_COOKIE_SAMESITE=Lax

# 记住我配置  
REMEMBER_COOKIE_SECURE=False
REMEMBER_COOKIE_HTTPONLY=True
REMEMBER_COOKIE_SAMESITE=Lax

2. 登录路由优化

app/web/__init__.py 中优化了登录处理:

  • 生产环境下对缺少CSRF令牌的请求更宽容
  • 增加了详细的日志记录以便调试
  • 改进了错误处理和用户提示

3. 前端JavaScript增强

app/web/templates/login.html 中改进了登录逻辑:

  • 更健壮的CSRF令牌获取机制
  • 使用 credentials: 'include' 支持跨域Cookie
  • 更好的错误处理和用户反馈

4. CORS配置完善

app/__init__.py 中增加了登录页面的CORS支持

cors.init_app(app, resources={
    r"/api/*": {
        "origins": ["https://km.taisan.online", "http://km.taisan.online", ...], 
        "methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
        "allow_headers": ["Content-Type", "Authorization"]
    },
    r"/login": {
        "origins": ["https://km.taisan.online", "http://km.taisan.online", ...], 
        "methods": ["GET", "POST", "OPTIONS"],
        "allow_headers": ["Content-Type", "X-Requested-With"],
        "supports_credentials": True
    }
})

部署建议

1. 协议选择

  • HTTP访问:保持 SESSION_COOKIE_SECURE=False
  • HTTPS访问:设置为 SESSION_COOKIE_SECURE=True

2. 域名配置

确保 FRONTEND_DOMAIN 环境变量设置正确:

FRONTEND_DOMAIN=km.taisan.online

3. 重启应用

配置更改后需要重启Flask应用

# 如果使用systemd
sudo systemctl restart your-app-service

# 如果直接运行
pkill -f python
python run.py

测试验证

使用提供的测试脚本验证登录功能:

python test_login.py

故障排除

如果仍然出现400错误

  1. 检查浏览器控制台:查看具体的错误信息和网络请求
  2. 验证Cookie设置检查浏览器是否正确设置会话Cookie
  3. 查看服务器日志:检查 logs/kamaxitong.log 中的详细错误信息
  4. 测试CSRF令牌确保登录页面正确生成CSRF令牌

浏览器调试建议:

  1. 打开浏览器开发者工具 (F12)
  2. 切换到 Network 标签页
  3. 尝试登录并查看请求详情
  4. 检查请求头、响应头和Cookie信息

日志分析:

查看应用日志获取详细信息:

tail -f logs/kamaxitong.log

安全注意事项

虽然为了兼容性放宽了CSRF验证但生产环境中仍建议

  1. 使用HTTPS协议
  2. 正确配置CSRF保护
  3. 定期更新密钥和令牌
  4. 监控异常登录尝试

联系支持

如果问题仍然存在,请提供以下信息:

  1. 完整的错误日志
  2. 浏览器网络请求的截图
  3. 当前的环境配置(隐藏敏感信息)
  4. 访问的完整URL