增加登陆功能,并修改正式环境用5002端口
This commit is contained in:
60
app.py
60
app.py
@@ -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('/')
|
||||
|
||||
Reference in New Issue
Block a user