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

143 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 域名部署登录问题修复指南
## 问题分析
在通过域名访问系统时出现的登录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