- 后端:新增 /api/auth/login 与 /api/auth/status;HMAC 签名令牌 30 天有效、 服务重启不失效;设置 SITE_PASSWORD 后中间件拦截除登录/健康检查/CORS 预检 外的所有 /api/*,未启用密码时行为不变(本地开发默认开放) - 前端:AuthGate 登录层 + BookMate 风格全屏登录页(墨绿卡片、轨道环、书标金句); 令牌存 localStorage 随请求带 X-Access-Token 头,401 自动清令牌重新弹出登录页; 侧栏底部新增「退出登录」按钮(仅在启用密码时显示) - 认证通过后才挂载主应用,避免未登录先发起数据请求 Co-Authored-By: Claude Code <noreply@anthropic.com>
39 lines
1.3 KiB
Bash
39 lines
1.3 KiB
Bash
# ===== 运行与存储 =====
|
||
# 数据库 / 上传 / 数据目录(默认相对 backend 目录,可按需改为绝对路径)
|
||
DATABASE_URL=sqlite+aiosqlite:///./data/bookmate.db
|
||
UPLOAD_DIR=./uploads
|
||
DATA_DIR=./data
|
||
# 后端监听(云端部署时 API_HOST 保持 0.0.0.0,由 nginx 反代)
|
||
API_HOST=0.0.0.0
|
||
API_PORT=8000
|
||
|
||
# 站点访问密码:留空 = 不启用登录(本地开发默认);
|
||
# 设置后整个应用需要密码才能使用,前端会显示登录页(令牌 30 天有效)
|
||
SITE_PASSWORD=
|
||
|
||
# ===== 模型 Provider(至少配一个;也可启动后在网页「管理模型」里添加)=====
|
||
DEEPSEEK_API_KEY=
|
||
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
|
||
DEEPSEEK_MODEL=deepseek-chat
|
||
|
||
OPENAI_API_KEY=
|
||
OPENAI_BASE_URL=https://api.openai.com/v1
|
||
OPENAI_MODEL=gpt-4o
|
||
|
||
ANTHROPIC_API_KEY=
|
||
ANTHROPIC_MODEL=claude-sonnet-4-20250514
|
||
|
||
OPENROUTER_API_KEY=
|
||
OPENROUTER_MODEL=openrouter/auto
|
||
|
||
# ===== 向量检索 & 重排(OpenAI 兼容 API,如硅基流动 SiliconFlow)=====
|
||
# embedding_base_url: 支持 OpenAI 兼容 /embeddings 的端点前缀
|
||
EMBEDDING_BASE_URL=https://api.siliconflow.cn/v1
|
||
EMBEDDING_API_KEY=
|
||
EMBEDDING_MODEL=BAAI/bge-m3
|
||
# rerank: 硅基流动使用 /v1/rerank,OpenAI 不提供;留空则跳过重排
|
||
RERANK_BASE_URL=https://api.siliconflow.cn/v1
|
||
RERANK_API_KEY=
|
||
RERANK_MODEL=BAAI/bge-reranker-v2-m3
|
||
EMBEDDING_BATCH_SIZE=64
|