#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, ваш комментарий помог мне понять, как это должно работать. Потому что до этого я думал реализовать пользовательский контроллер для рендеринга форм.