3.5 KiB
3.5 KiB
域名部署登录问题修复指南
问题分析
在通过域名访问系统时出现的登录400错误主要源于以下几个问题:
- CSRF令牌验证失败:跨域请求时CSRF令牌可能无法正确传递
- Cookie域配置问题:会话Cookie的域配置可能与实际访问域不匹配
- HTTPS/HTTP协议不匹配:Cookie安全标志配置错误
- 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错误:
- 检查浏览器控制台:查看具体的错误信息和网络请求
- 验证Cookie设置:检查浏览器是否正确设置会话Cookie
- 查看服务器日志:检查
logs/kamaxitong.log中的详细错误信息 - 测试CSRF令牌:确保登录页面正确生成CSRF令牌
浏览器调试建议:
- 打开浏览器开发者工具 (F12)
- 切换到 Network 标签页
- 尝试登录并查看请求详情
- 检查请求头、响应头和Cookie信息
日志分析:
查看应用日志获取详细信息:
tail -f logs/kamaxitong.log
安全注意事项
虽然为了兼容性放宽了CSRF验证,但生产环境中仍建议:
- 使用HTTPS协议
- 正确配置CSRF保护
- 定期更新密钥和令牌
- 监控异常登录尝试
联系支持
如果问题仍然存在,请提供以下信息:
- 完整的错误日志
- 浏览器网络请求的截图
- 当前的环境配置(隐藏敏感信息)
- 访问的完整URL