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