[阶段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>
This commit is contained in:
45
backend/config.py
Normal file
45
backend/config.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""
|
||||
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()]
|
||||
Reference in New Issue
Block a user