Как в symfony 5.2.2 сделать basic authentication на конкретный роут?

В Symfony 5.2.2 вы можете сделать basic authentication на конкретный роут, используя компонент Security Bundle. Для этого вам понадобится выполнить следующие шаги:

1. Установите компонент Security Bundle, если он еще не установлен, с помощью Composer:

composer require symfony/security-bundle

2. Создайте класс-контроллер, который будет обрабатывать ваш роут:

// src/Controller/MyController.php

namespace AppController;

use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;

class MyController extends AbstractController
{
    /**
     * @Route("/my-route")
     */
    public function myRoute()
    {
        // Ваш код обработки роута
        return new Response('Hello, World!');
    }
}

3. Создайте конфигурационный файл для Security Bundle:

# config/packages/security.yaml

security:
    # ...
    firewalls:
        main:
            http_basic: true
            pattern: ^/my-route
            provider: in_memory

    providers:
        in_memory:
            memory:
                users:
                    user: { password: $argon2id$v=19$m=65536,t=4,p=1$/+JMy8mgiLuWbPSUeBvYbQ$Rh/aTnS4B9aU6kw4i23Ekn2MuwRKa6rP9DJIJspemSU, roles: ROLE_USER }

В данном примере мы использовали метод аутентификации http_basic, который требует передачи имени пользователя и пароля в заголовке запроса. Мы также указали путь к роуту /my-route с помощью опции pattern. Конфигурация provider указывает, что мы хотим использовать предоставляемый in-memory провайдер для аутентификации.

4. Теперь, когда вы настроили аутентификацию, вы можете получить имя пользователя в вашем методе контроллера:

// src/Controller/MyController.php

// ...

use SymfonyComponentSecurityCoreSecurity;

class MyController extends AbstractController
{
    // ...

    public function myRoute(Security $security)
    {
        $user = $security->getUser();
        
        // Ваш код обработки роута
        return new Response('Hello, '.$user->getUsername().'!');
    }
}

5. Теперь, когда вы отправляете запрос на /my-route, Symfony будет запрашивать у вас имя пользователя и пароль для аутентификации. Указанные вами учетные данные будут проверяться по нашей конфигурации in_memory провайдера. Если аутентификация пройдет успешно, Symfony позволит вам получить имя пользователя в контроллере.

Теперь вы настроили базовую аутентификацию на конкретный роут в Symfony 5.2.2.