Kamixitong/DOMAIN_DEPLOYMENT_FIX.md

143 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

2025-11-22 20:32:49 +08:00
# 域名部署登录问题修复指南
## 问题分析
在通过域名访问系统时出现的登录400错误主要源于以下几个问题
1. **CSRF令牌验证失败**跨域请求时CSRF令牌可能无法正确传递
2. **Cookie域配置问题**会话Cookie的域配置可能与实际访问域不匹配
3. **HTTPS/HTTP协议不匹配**Cookie安全标志配置错误
4. **CORS配置不完整**:跨域资源共享配置不充分
## 修复措施
### 1. 环境配置调整
更新 `.env` 文件中的会话配置:
```bash
# 会话配置 - 根据实际协议调整
# 如果使用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支持
```python
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` 环境变量设置正确:
```bash
FRONTEND_DOMAIN=km.taisan.online
```
### 3. 重启应用
配置更改后需要重启Flask应用
```bash
# 如果使用systemd
sudo systemctl restart your-app-service
# 如果直接运行
pkill -f python
python run.py
```
## 测试验证
使用提供的测试脚本验证登录功能:
```bash
python test_login.py
```
## 故障排除
### 如果仍然出现400错误
1. **检查浏览器控制台**:查看具体的错误信息和网络请求
2. **验证Cookie设置**检查浏览器是否正确设置会话Cookie
3. **查看服务器日志**:检查 `logs/kamaxitong.log` 中的详细错误信息
4. **测试CSRF令牌**确保登录页面正确生成CSRF令牌
### 浏览器调试建议:
1. 打开浏览器开发者工具 (F12)
2. 切换到 Network 标签页
3. 尝试登录并查看请求详情
4. 检查请求头、响应头和Cookie信息
### 日志分析:
查看应用日志获取详细信息:
```bash
tail -f logs/kamaxitong.log
```
## 安全注意事项
虽然为了兼容性放宽了CSRF验证但生产环境中仍建议
1. 使用HTTPS协议
2. 正确配置CSRF保护
3. 定期更新密钥和令牌
4. 监控异常登录尝试
## 联系支持
如果问题仍然存在,请提供以下信息:
1. 完整的错误日志
2. 浏览器网络请求的截图
3. 当前的环境配置(隐藏敏感信息)
4. 访问的完整URL