update pay ui
This commit is contained in:
27
app.py
27
app.py
@@ -54,6 +54,7 @@ from clickhouse_driver import Client as Cclient
|
||||
from elasticsearch import Elasticsearch
|
||||
from flask_cors import CORS
|
||||
import redis
|
||||
from flask_session import Session
|
||||
|
||||
from collections import defaultdict
|
||||
from functools import lru_cache
|
||||
@@ -286,15 +287,30 @@ MAIL_DEFAULT_SENDER = 'admin@valuefrontier.cn'
|
||||
# 重要:生产环境请使用环境变量配置,不要硬编码
|
||||
import os
|
||||
app.config['SECRET_KEY'] = os.environ.get('FLASK_SECRET_KEY', 'vf_production_secret_key_2024_valuefrontier_cn')
|
||||
app.config['SESSION_COOKIE_SECURE'] = False # 如果生产环境使用HTTPS,应设为True
|
||||
|
||||
# ============ Redis Session 配置(支持多进程/多 Worker)============
|
||||
# 使用 Redis 存储 session,确保多个 Gunicorn worker 共享 session
|
||||
app.config['SESSION_TYPE'] = 'redis'
|
||||
app.config['SESSION_REDIS'] = redis.Redis(host='localhost', port=6379, db=1) # 使用 db=1,与微信 session 的 db=0 分开
|
||||
app.config['SESSION_PERMANENT'] = True
|
||||
app.config['SESSION_USE_SIGNER'] = True # 对 session cookie 签名,提高安全性
|
||||
app.config['SESSION_KEY_PREFIX'] = 'vf_session:' # session key 前缀
|
||||
# ============ Redis Session 配置结束 ============
|
||||
|
||||
# Cookie 配置 - 重要:HTTPS 环境必须设置 SECURE=True
|
||||
app.config['SESSION_COOKIE_SECURE'] = True # 生产环境使用 HTTPS,必须为 True
|
||||
app.config['SESSION_COOKIE_HTTPONLY'] = True # 生产环境应设为True,防止XSS攻击
|
||||
app.config['SESSION_COOKIE_SAMESITE'] = 'Lax' # 使用'Lax'以平衡安全性和功能性
|
||||
app.config['SESSION_COOKIE_DOMAIN'] = None # 不限制域名
|
||||
app.config['SESSION_COOKIE_PATH'] = '/' # 设置cookie路径
|
||||
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7) # session持续7天
|
||||
app.config['REMEMBER_COOKIE_DURATION'] = timedelta(days=30) # 记住登录30天
|
||||
app.config['REMEMBER_COOKIE_SECURE'] = False # 记住登录cookie不要求HTTPS
|
||||
app.config['REMEMBER_COOKIE_HTTPONLY'] = False # 允许JavaScript访问
|
||||
app.config['REMEMBER_COOKIE_SECURE'] = True # 生产环境使用 HTTPS,必须为 True
|
||||
app.config['REMEMBER_COOKIE_HTTPONLY'] = True # 防止XSS攻击
|
||||
|
||||
# 初始化 Flask-Session(Redis 存储)
|
||||
Session(app)
|
||||
print("✅ Flask-Session (Redis) 已初始化,支持多 Worker 共享 session")
|
||||
|
||||
# 配置邮件
|
||||
app.config['MAIL_SERVER'] = MAIL_SERVER
|
||||
@@ -395,16 +411,21 @@ def _detect_async_mode():
|
||||
_async_mode = _detect_async_mode()
|
||||
print(f"📡 Flask-SocketIO async_mode: {_async_mode}")
|
||||
|
||||
# Redis 消息队列 URL(支持多 Worker 之间的消息同步)
|
||||
SOCKETIO_MESSAGE_QUEUE = 'redis://localhost:6379/2' # 使用 db=2,与 session 和微信 session 分开
|
||||
|
||||
socketio = SocketIO(
|
||||
app,
|
||||
cors_allowed_origins=["http://localhost:3000", "http://127.0.0.1:3000", "http://localhost:5173",
|
||||
"https://valuefrontier.cn", "http://valuefrontier.cn"],
|
||||
async_mode=_async_mode,
|
||||
message_queue=SOCKETIO_MESSAGE_QUEUE, # 启用 Redis 消息队列,支持多 Worker
|
||||
logger=True,
|
||||
engineio_logger=False,
|
||||
ping_timeout=120, # 心跳超时时间(秒),客户端120秒内无响应才断开
|
||||
ping_interval=25 # 心跳检测间隔(秒),每25秒发送一次ping
|
||||
)
|
||||
print(f"✅ Flask-SocketIO 已配置 Redis 消息队列,支持多 Worker")
|
||||
|
||||
|
||||
@login_manager.user_loader
|
||||
|
||||
Reference in New Issue
Block a user