# 斗鱼批量登录 Web 后台 全自动登录斗鱼账号、获取 Cookie 的 Web 管理平台。 ## 功能特性 - 极验 v3 滑块自动识别 - 邮箱验证码自动获取(IMAP) - 批量登录 + 实时日志推送(WebSocket) - 代理 & 白名单自动管理 - 角色权限控制(超级管理员 / 运营 / 客服) ## 项目结构 ``` douyu_login_py/ ├── core/ # 核心业务逻辑 │ ├── models.py # Account, ProxyConfig 数据类 │ ├── douyu/ # 斗鱼登录模块 │ │ ├── login.py # 登录流程 │ │ ├── crypto.py # 密码加密 │ │ ├── email_verifier.py # 邮箱验证码 │ │ ├── proxy.py # 代理管理 │ │ └── whitelist.py # 白名单管理 │ └── geetest/ # 极验验证码求解 │ ├── common/ # 公共工具(网络/加密/图像/轨迹) │ └── v3_slide/ # v3 滑块求解器 ├── web/ # Web 后台 │ ├── backend/ # FastAPI 后端 │ │ ├── main.py # 入口 │ │ ├── routers/ # API 路由 │ │ ├── migrations/ # Alembic 数据库迁移 │ │ └── services/ # 业务服务 │ └── frontend/ # React + Ant Design 前端 ├── utils/ # 通用工具 │ └── logger.py ├── data/ # 运行时数据(gitignore) ├── start_web.sh # 一键启动 └── pyproject.toml ``` ## 快速开始 ```bash # 一键启动(自动检查依赖) ./start_web.sh ``` 或手动启动: ```bash # 后端 uv pip install -e . .venv/bin/python -m uvicorn web.backend.main:app --reload --port 8000 # 前端 cd web/frontend && npm install && npm run dev ``` 访问 `http://localhost:5173`,默认账号 `admin / admin123`。 ### 敏感数据加密 账号密码、邮箱密码、Cookie、代理密钥等敏感字段会以密文形式落盘。生产环境请在 `.env` 中设置稳定的 `APP_ENCRYPTION_KEY`,并长期保留;更换该密钥会导致历史密文无法解密。 ```bash python -c "import secrets; print(secrets.token_urlsafe(32))" ``` ## 角色权限 | 角色 | 权限 | |---|---| | 超级管理员 | 全部功能 + 用户管理 + 权限分配 | | 运营 | 账号管理 + 批量登录 + 代理配置 + Cookie 导出 | | 客服 | 仅查看分配给自己的账号(只显示用户名) | ## 登录流程 ``` 1. 获取极验参数 → 滑块验证 → 自动识别缺口 2. 获取邮箱验证 code → 发送验证邮件 3. IMAP 获取验证码 → 提交验证码 → 获取 Cookie ``` ## 技术栈 - 后端:FastAPI + SQLAlchemy + SQLite + JWT - 前端:React + Ant Design + Vite - 核心:Python + OpenCV + pycryptodome - 迁移:Alembic ## 许可证 MIT License ## 部署 ### Docker 部署(推荐,生产环境) ```bash # 一键部署(自动构建镜像 + 启动服务) ./deploy.sh # 或手动操作: docker compose up -d --build ``` 部署完成后访问 `http://服务器IP:8000`,默认账号 `admin / admin123`。 **Docker 常用命令:** ```bash docker compose logs -f # 查看实时日志 docker compose restart # 重启服务 docker compose down # 停止服务 docker compose up -d --build # 重新构建并启动(代码更新后) ``` **数据持久化:** 数据库和日志通过 volume 挂载到宿主机 `./data` 和 `./logs` 目录,容器重建后数据不丢失。 ### 本地开发 ```bash # 一键启动(自动检查依赖,前后端分离开发模式) ./start_web.sh # 或手动启动: # 后端 uv pip install -e . .venv/bin/python -m uvicorn web.backend.main:app --reload --port 8000 # 前端 cd web/frontend && npm install && npm run dev ``` 访问 `http://localhost:5173`(开发模式),默认账号 `admin / admin123`。 ### 代理配置说明 在 Web 界面"代理配置"页面设置: 1. **API 代理**:填入代理 API 地址(支持返回 JSON 格式),系统自动获取并验证代理 2. **白名单**:如代理需要白名单,填入 UID 和 UKEY,系统自动同步出口 IP 3. **出口 IP 漂移**:移动网络出口 IP 频繁漂移时,系统会保留多个出口 IP 在白名单中 **代理 API JSON 格式:** ```json // 正常返回 {"code":0,"success":"true","msg":"","data":[{"IP":"1.2.3.4","Port":8080}]} // 白名单错误 {"code":-1,"msg":"51.请先添加白名单:1.2.3.4","data":""} ```