Загрузка данных


@app.route('/login-2fa', methods=['GET', 'POST'])
def login_2fa():
    # 1. Проверяем, есть ли временный ID в сессии
    user_id = session.get('pre_auth_user_id')
    if not user_id:
        return redirect(url_for('login'))
        
    user = User.query.get(user_id)
    
    if request.method == 'POST':
        otp = request.form.get('otp')
        # 2. Проверяем код
        if otp and pyotp.TOTP(user.totp_secret).verify(otp):
            # --- ВСТАВЛЯТЬ СЮДА ---
            # Убираем временный ID
            session.pop('pre_auth_user_id', None)
            
            # Генерируем новый токен сессии
            token = secrets.token_hex(24)
            
            # Создаем запись в базе данных (UserSession)
            new_session = UserSession(
                user_id=user.id,
                session_token=token,
                ip_address=request.remote_addr,
                user_agent=request.headers.get('User-Agent')
            )
            db.session.add(new_session)
            db.session.commit()

            # Обновляем основную сессию Flask
            session.update({
                'user_id': user.id,
                'username': user.username,
                'session_token': token  # Важно: сохраняем токен и в куки
            })
            return redirect(url_for('dashboard'))
            # --- КОНЕЦ ВСТАВКИ ---
        else:
            flash('Неверный код 2FA', 'danger')
            
    return render_template('login_2fa.html')