Как реализовать функцию повторной отправки кода в scheb/2fa?

#symfony

Вопрос:

Я внедрил в своем приложении двухфакторную аутентификацию на основе кода электронной почты. После того, как пользователь введет свой адрес электронной почты и пароль, система перенаправит его на маршрут /2fa, где ему нужно ввести код с электронной почты. Все работает отлично. Но я не понимаю, как реализовать функциональность повторной отправки кода. Небольшого совета в доке мне недостаточно. Пожалуйста, помогите.

Версия пакета: scheb/2fa-пакет: 5.10.1, scheb/2fa-электронная почта: 5.10.1
Версия Symfony: 5.2.10
Версия PHP: 8.0.3

конфигурация/пакеты/безопасность.yaml

 # https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
    # used to reload user from session amp; other features (e.g. switch_user)
    app_user_provider:
        entity:
            class: AppEntityUser
            property: email
    # used to reload user from session amp; other features (e.g. switch_user)
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        anonymous: true
        lazy: true
        provider: app_user_provider
        guard:
            authenticators:
                - AppSecurityLoginFormAuthenticator
        logout:
            path: app_logout
            # where to redirect after logout
            # target: app_any_route
            
        access_denied_handler: AppSecurityAccessDeniedHandler

        two_factor:
            auth_form_path: 2fa_login    # The route name you have used in the routes.yaml
            check_path: 2fa_login_check  # The route name you have used in the routes.yaml
        
        # activate different ways to authenticate
        # https://symfony.com/doc/current/security.html#firewalls-authentication

        # https://symfony.com/doc/current/security/impersonating_user.html
        # switch_user: true

# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
    - { path: '^/2fa', roles: IS_AUTHENTICATED_2FA_IN_PROGRESS }
    - { path: '^/login', roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/logout', roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/register', roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/reset-password', roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/verify/email', roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/', roles: ROLE_USER }
    # - { path: ^/admin, roles: ROLE_ADMIN }
    # - { path: ^/profile, roles: ROLE_USER }
 

конфигурация/пакеты/scheb_2fa.yaml

 scheb_two_factor:
    security_tokens:
         - SymfonyComponentSecurityGuardTokenPostAuthenticationGuardToken
    email:
        enabled: true
        mailer: 2fa_mailer
        template: security/2fa_form.html.twig
        digits: 6
 

конфигурация/маршруты.yaml

 2fa_login:
    path: /2fa
    defaults:
        _controller: "scheb_two_factor.form_controller:form"

2fa_login_check:
    path: /2fa_check
 

Комментарии:

1. Автоматически подключайте SchebTwoFactorBundleБезопасностьTwoFactorПровайдерЭлектронная почтаГенераторИнтерфейс кодирования $Интерфейс кодирования в вашем контроллере или службе и выполняйте интерфейс кодирования $ — >Повторная отправка($пользователь)

2. спасибо @TimZwinkels, ваш комментарий помог мне понять, как это должно работать. Потому что до этого я думал реализовать пользовательский контроллер для рендеринга форм.