增加登陆功能,并修改正式环境用5002端口

This commit is contained in:
2026-07-21 16:00:46 +08:00
parent 22f9bccb09
commit 07e88986ab
11 changed files with 691 additions and 8 deletions

60
app.py
View File

@@ -4,7 +4,7 @@ Flask 主应用
"""
import os
from datetime import datetime
from flask import Flask, render_template, Response
from flask import Flask, render_template, Response, request, jsonify, g
from flask_cors import CORS
from apscheduler.schedulers.background import BackgroundScheduler
import pytz
@@ -15,6 +15,7 @@ from lib.api import register_blueprints
from lib.db_init import init_database_tables
from lib.logger import log_info, log_error, log_warning
from lib.api.download_api import cleanup_old_temp_zips
from lib.api.auth_api import get_current_user
# 创建 Flask 应用
app = Flask(__name__,
@@ -36,6 +37,63 @@ else:
log_error('数据库表初始化失败,请检查数据库连接', 'app')
# ==================== 登录验证中间件 ====================
# 不需要登录的路径白名单
WHITELIST_PATHS = [
'/api/auth/login',
'/api/auth/info',
'/public/',
'/static/',
'/favicon.ico',
'/'
]
@app.before_request
def check_login():
"""全局登录验证"""
path = request.path
# 白名单路径直接放行
for wp in WHITELIST_PATHS:
if path.startswith(wp):
return None
# 页面请求HTML直接放行由前端控制登录
if path == '/' or path.endswith('.html'):
return None
# 静态文件直接放行
if path.startswith('/public/') or path.startswith('/static/'):
return None
# API 请求需要验证登录
if path.startswith('/api/'):
# 先从 header 取 token再从 query 参数取(用于下载链接)
token = request.headers.get('Authorization', '')
if token.startswith('Bearer '):
token = token[7:]
if not token:
token = request.args.get('token', '')
user = None
if token:
from lib.api.auth_api import get_user_by_token
user = get_user_by_token(token)
if not user:
return jsonify({
'success': False,
'message': '未登录或登录已过期',
'code': 401
}), 401
g.current_user = user
return None
# ==================== 页面路由 ====================
@app.route('/')