Files
full-stack-doc/backend/fix_cors.sh
2025-10-14 20:05:29 +08:00

118 lines
3.2 KiB
Bash
Raw 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.

#!/bin/bash
# CORS跨域问题快速修复脚本
echo "=== CORS跨域问题修复工具 ==="
# 检查当前目录
if [ ! -f "main.py" ]; then
echo "错误: 请在包含main.py的项目根目录下运行此脚本"
exit 1
fi
echo "当前目录: $(pwd)"
# 1. 更新配置文件
echo ""
echo "1. 更新CORS配置..."
# 更新config.py
echo "更新 app/core/config.py..."
sed -i 's/ALLOWED_HOSTS: List\[str\] = \[.*\]/ALLOWED_HOSTS: List[str] = ["*"] # 允许所有域名访问/' app/core/config.py
if [ $? -eq 0 ]; then
echo "✓ config.py 更新成功"
else
echo "✗ config.py 更新失败,请手动检查"
fi
# 2. 更新.env文件
echo ""
echo "2. 更新环境配置..."
if [ -f ".env" ]; then
# 备份原始文件
cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
# 更新CORS配置
sed -i 's/ALLOWED_HOSTS=\[.*\]/ALLOWED_HOSTS=["*"]/' .env
if grep -q 'ALLOWED_HOSTS=\["\*"\]' .env; then
echo "✓ .env 文件更新成功"
else
echo "✗ .env 文件更新失败,请手动检查"
fi
else
echo ".env 文件不存在,创建新的配置..."
cat > .env << EOF
# 基础配置
ENVIRONMENT=production
DEBUG=false
# 数据库配置
DATABASE_URL=mysql+pymysql://用户名:密码@localhost:3306/数据库名
# Redis配置
REDIS_URL=redis://localhost:6379
# JWT配置
JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production-$(date +%s)
JWT_ALGORITHM=HS256
JWT_EXPIRE_MINUTES=30
# 文件上传配置
UPLOAD_DIR=uploads
MAX_FILE_SIZE=10485760
# CORS配置
ALLOWED_HOSTS=["*"]
EOF
echo "✓ .env 文件创建成功"
fi
# 3. 验证配置
echo ""
echo "3. 验证CORS配置..."
# 检查config.py
if grep -q 'ALLOWED_HOSTS: List\[str\] = \["\*"\]' app/core/config.py; then
echo "✓ config.py CORS配置正确"
else
echo "✗ config.py CORS配置可能有问题"
fi
# 检查.env文件
if grep -q 'ALLOWED_HOSTS=\["\*"\]' .env; then
echo "✓ .env CORS配置正确"
else
echo "✗ .env CORS配置可能有问题"
fi
# 4. 重启服务提示
echo ""
echo "4. 重启服务..."
echo "配置更新完成,请重启应用以使配置生效"
echo ""
echo "重启方式:"
echo "1. 如果应用正在运行,请按 Ctrl+C 停止"
echo "2. 然后重新启动: python main.py"
echo "3. 或者使用启动脚本: ./start_app.sh"
echo ""
echo "如果使用Docker部署"
echo "1. 重新构建镜像: docker build -t cloud-drive-backend:latest ."
echo "2. 重新运行容器: docker run -d -p 8002:8002 cloud-drive-backend:latest"
# 5. 测试CORS
echo ""
echo "5. CORS测试建议..."
echo "重启后可以通过以下方式测试CORS"
echo "1. 浏览器开发者工具 -> Network -> 查看请求头"
echo "2. 检查是否有 'Access-Control-Allow-Origin: *' 头"
echo "3. 使用curl测试: curl -H 'Origin: http://example.com' -H 'Access-Control-Request-Method: POST' -H 'Access-Control-Request-Headers: X-Requested-With' -X OPTIONS http://localhost:8002/api/v1/health"
echo ""
echo "=== CORS修复完成 ==="
echo ""
echo "注意事项:"
echo "- 允许所有域名访问 (\"*\") 仅适用于开发和测试环境"
echo "- 生产环境建议设置具体的允许域名列表"
echo "- 如需更安全的CORS配置请手动修改 ALLOWED_HOSTS"