Пользовательский пакет FOS не перенаправляет на fos_user_registivation_check_email после отправки формы - PullRequest
0 голосов
/ 28 августа 2018

Я установил registration: confirmation: enabled: true в config.yml , поэтому все работает хорошо, так как отправляется электронное письмо и пользователь переходит по ссылке, но проблема в том, что после отправки формы регистрации он перенаправляет на страница входа. Глядя на _profiler, я не вижу ни одного запроса на /register/check-email. Я использую FOS Userbundle v2.1.2 и Symfony 3.4.14.

Я использую сторонний php-скрипт и чувствую, что в services.yml или config.yml есть опция, которую я могу указать, чтобы она перенаправляла на рендеринг check_email.html.twig, но я не уверен, что это. Я фактически удалил весь метод checkEmailAction, который, как я подозревал, был методом, обрабатывающим запрос, и он не имел никакого эффекта, электронное письмо все еще отправляется и такое же поведение.

checkEmailAction (метод)

  /**
     * Tell the user to check their email provider.
     */
    public function checkEmailAction(Request $request)
    {
        $email = $request->getSession()->get('fos_user_send_confirmation_email/email');

        if (empty($email)) {
            return new RedirectResponse($this->generateUrl('fos_user_registration_register'));
        }

        $request->getSession()->remove('fos_user_send_confirmation_email/email');
        $user = $this->userManager->findUserByEmail($email);

        if (null === $user) {
            return new RedirectResponse($this->container->get('router')->generate('fos_user_security_login'));
        }

        return $this->render('@FOSUser/Registration/check_email.html.twig', array(
            'user' => $user,
        ));
    }

register_content.html.twig

{% trans_default_domain 'FOSUserBundle' %}

{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register'}}) }}
    {{ form_widget(form) }}
    <div>
        <input type="submit" value="{{ 'registration.submit'|trans }}" />
    </div>
{{ form_end(form) }}

Он использует Swiftmailer для отправки электронного письма, и поэтому я думаю, может быть, нужно подключить слушателя к swiftmailer, но я не уверен.

Маршрут

<route id="fos_user_registration_check_email" path="/check-email" methods="GET">
    <default key="_controller">fos_user.registration.controller:checkEmailAction</default>
</route>

Кроме того, для / register, в моем security.yml

роль IS_AUTHENTICATED ANONYMOUSLY

контроль доступа (security.yml)

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/account, role: IS_AUTHENTICATED_FULLY }

1 Ответ

0 голосов
/ 28 августа 2018

В вашей конфигурации у вас есть / register / check-email, настроенный для анонимного доступа?

Что-то вроде

security:
    access_control:
        - { path: ^/register/check-email, roles: IS_AUTHENTICATED_ANONYMOUSLY }
...