Files
GarminHealthLab/backend/config.py
ericwyuan 3b2d0697f0 [阶段1.1-1.7] 实现完整的认证系统
后端实现:
- 创建 AuthService 包含密码加密、JWT 生成和验证
- 创建 authMiddleware 用于 API 路由保护
- 实现 auth 路由 (register, login, logout, /me)

前端实现:
- 创建 Login 页面 (登录/注册标签页)
- 创建 ProtectedRoute 组件用于路由保护
- 更新 App.tsx 集成路由保护
- 前端 API 客户端已包含认证方法和拦截器

验收标准已满足:
- 用户可以注册和登录
- JWT Token 正确生成和验证
- 受保护的路由需要有效 Token
- 未认证用户重定向到登录页面

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-23 12:25:33 +08:00

46 lines
1.8 KiB
Python

"""
Central configuration for the Garmin Health Lab Flask backend.
Reads settings from a `.env` file (backend/.env) and the process environment.
The same code runs against SQLite (local dev) or MariaDB (NAS production)
by switching DB_TYPE — business code never branches on the backend.
"""
import os
from dotenv import load_dotenv
# Load .env from the backend directory (falls back to cwd / parent search).
_BACKEND_DIR = os.path.dirname(os.path.abspath(__file__))
_ENV_PATH = os.path.join(_BACKEND_DIR, ".env")
if os.path.exists(_ENV_PATH):
load_dotenv(_ENV_PATH)
else:
load_dotenv() # walk up from cwd
# --- Database selection -----------------------------------------------------
DB_TYPE = (os.environ.get("DB_TYPE") or "sqlite").lower()
# SQLite (default, zero-config local development)
SQLITE_PATH = os.environ.get("DATABASE_PATH") or os.path.join(
_BACKEND_DIR, "data", "health.db"
)
# MariaDB (production, runs on the NAS)
MARIADB_SOCKET = os.environ.get("MARIADB_SOCKET") or ""
MARIADB_HOST = os.environ.get("MARIADB_HOST") or "127.0.0.1"
MARIADB_PORT = int(os.environ.get("MARIADB_PORT") or 3306)
MARIADB_USER = os.environ.get("MARIADB_USER") or "root"
MARIADB_PASSWORD = os.environ.get("MARIADB_PASSWORD") or ""
MARIADB_DATABASE = os.environ.get("MARIADB_DATABASE") or "garmin_health_lab"
# --- Auth -------------------------------------------------------------------
JWT_SECRET = os.environ.get("JWT_SECRET") or "dev_secret_change_me"
JWT_EXPIRY_DAYS = int(os.environ.get("JWT_EXPIRY_DAYS") or 7)
# --- Server -----------------------------------------------------------------
PORT = int(os.environ.get("PORT") or 5000)
# Comma-separated list of allowed front-end origins (CORS).
_CORS_RAW = os.environ.get("CORS_ORIGIN") or "http://localhost:3000,http://localhost:5173"
CORS_ORIGINS = [o.strip() for o in _CORS_RAW.split(",") if o.strip()]