Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2a759d655d |
@@ -305,19 +305,49 @@ def find_draw_by_gen_time(gen_time):
|
||||
# ============================================================
|
||||
# 认证装饰器(可选)
|
||||
# ============================================================
|
||||
# BIZ-109 临时放行白名单:仅 GET 只读接口临时放行鉴权(应急修复)
|
||||
# 原因:BIZ-108 启用 auth_enabled 后,index.html 前端未适配 token 注入,
|
||||
# 导致「记录」tab 完全不可用。临时放行只读接口恢复业务,
|
||||
# BIZ-110 跟踪 index.html 适配后恢复鉴权。
|
||||
# 白名单接口:GET /api/records, GET /api/history
|
||||
# 保留鉴权接口:所有 POST/DELETE/写接口
|
||||
AUTH_BYPASS_PATHS = {'/api/records', '/api/history'}
|
||||
# BIZ-109 临时放行白名单 v2(v1 修复不彻底,用户验收仍报错,升级白名单)
|
||||
#
|
||||
# 原因:BIZ-108 commit 31cabbe 启用 auth_enabled=True,但 index.html 前端
|
||||
# api() 函数 (L944) 未注入 Authorization header。v1 白名单只覆盖
|
||||
# /api/records 和 /api/history 两个根路径,遗漏了子路径接口和
|
||||
# /api/statistics、/api/generate,导致刘总验收仍报「未授权访问」。
|
||||
#
|
||||
# 升级策略(按方法 + 路径前缀):
|
||||
# - GET 类全部放行(含子路径):/api/records, /api/records/<id>/preview,
|
||||
# /api/records/<id>/compare, /api/history, /api/statistics,
|
||||
# /api/download/<path>
|
||||
# - POST /api/generate 放行:号码生成是核心功能,前端必须可调
|
||||
# - DELETE 类保留鉴权:保护用户生成记录不被误删(核心防滥用)
|
||||
# - 其他 POST(如未来新增)保留鉴权
|
||||
#
|
||||
# 跟踪:BIZ-110 由 costcodev 适配 index.html 前端后撤白名单,恢复完整鉴权。
|
||||
# 闭环:2026-09-01 12:59 GMT+8 by 严维序 (opengineer)
|
||||
|
||||
# 路径前缀白名单(GET 类 + 写接口特例)
|
||||
AUTH_BYPASS_GET_PREFIXES = (
|
||||
'/api/records', # 含子路径 preview/compare
|
||||
'/api/history',
|
||||
'/api/statistics',
|
||||
'/api/download',
|
||||
)
|
||||
# 写接口特例白名单(精确路径)
|
||||
AUTH_BYPASS_POST_EXACT = {
|
||||
'/api/generate', # 号码生成(核心功能,前端必须可调)
|
||||
}
|
||||
|
||||
def _is_bypass(method, path):
|
||||
"""判断当前请求是否在 BIZ-109 临时白名单内。"""
|
||||
if method == 'GET':
|
||||
return any(path.startswith(p) for p in AUTH_BYPASS_GET_PREFIXES)
|
||||
if method == 'POST':
|
||||
return path in AUTH_BYPASS_POST_EXACT
|
||||
return False
|
||||
|
||||
def require_auth(f):
|
||||
@wraps(f)
|
||||
def decorated(*args, **kwargs):
|
||||
# BIZ-109 应急:GET 只读接口临时放行
|
||||
if request.method == 'GET' and request.path in AUTH_BYPASS_PATHS:
|
||||
# BIZ-109 应急:白名单内请求临时放行
|
||||
if _is_bypass(request.method, request.path):
|
||||
return f(*args, **kwargs)
|
||||
if CONFIG['auth_enabled']:
|
||||
token = request.headers.get('Authorization', '').replace('Bearer ', '')
|
||||
|
||||
Reference in New Issue
Block a user