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


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        user = User.query.filter_by(username=request.form.get('username')).first()
        if user and check_password_hash(user.password_hash, request.form.get('password')):
            
            # Сохраняем временный ID для этапа 2FA
            session['pre_auth_user_id'] = user.id

            # ЕСЛИ ЕСТЬ 2FA - ОТПРАВЛЯЕМ ПОДТВЕРЖДАТЬ
            if user.totp_secret:
                return redirect(url_for('login_2fa'))

            # ЕСЛИ 2FA НЕТ - СОЗДАЕМ СЕССИЮ СРАЗУ
            session.pop('pre_auth_user_id', None)
            
            token = secrets.token_hex(24)
            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()

            session.update({
                'user_id': user.id,
                'username': user.username,
                'session_token': token
            })
            return redirect(url_for('dashboard'))

        flash('Ошибка входа', 'danger')
    return render_template('login.html')