from flask import Blueprint, render_template, request, redirect, url_for, session, current_app from functools import wraps from loguru import logger # 创建认证蓝图 auth_bp = Blueprint('auth', __name__) # 登录检查装饰器 def login_required(f): @wraps(f) def decorated_function(*args, **kwargs): if not session.get('logged_in'): return redirect(url_for('auth.login')) return f(*args, **kwargs) return decorated_function # 登录页面 @auth_bp.route('/login', methods=['GET', 'POST']) def login(): error = None if request.method == 'POST': username = request.form['username'] password = request.form['password'] # 从应用上下文获取服务器实例,而不是从蓝图对象 server = current_app.dashboard_server if username == server.username and password == server.password: session['logged_in'] = True session['username'] = username # 存储用户名到session logger.debug(f"Login successful. Session after login: {dict(session)}") return redirect(url_for('main.index')) else: error = '用户名或密码错误' return render_template('login.html', error=error) # 登出 @auth_bp.route('/logout') def logout(): session.pop('logged_in', None) session.pop('username', None) # 同时删除username return redirect(url_for('auth.login'))