#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 认证模块 - 提供API访问认证功能 """ import os import logging import functools from flask import request, jsonify logger = logging.getLogger(__name__) # 从环境变量获取API密钥 API_KEY = os.environ.get("API_KEY", "changeme") def authenticate(func): """ 用于API路由的认证装饰器 Args: func: 被装饰的视图函数 Returns: 函数: 包含认证逻辑的包装函数 """ @functools.wraps(func) def wrapper(*args, **kwargs): # 获取请求头中的API Key api_key = request.headers.get("X-API-Key") # 验证API Key if not api_key or api_key != API_KEY: logger.warning(f"API认证失败:{'未提供API Key' if not api_key else 'API Key无效'}") return jsonify({ "success": False, "error": "未提供API Key或API Key无效" }), 401 # 认证通过,调用原始视图函数 return func(*args, **kwargs) return wrapper