Валидация ревизии Botdetect в Symfony 4 без использования сущности

Есть ли какой-нибудь способ проверки BotDetect recaptcha в конструкторе форм Symfony?

У меня есть форма ниже, которая позволяет пользователю вводить свою электронную почту.

     $form = $this->createFormBuilder()
        ->add('email', EmailType::class,[
            'label' => false,
            'attr' => [
                'style' => 'text-align:center;',
                'value' => $email,
            ]
        ])
        ->add('captchaCode', CaptchaType::class, array(
            'captchaConfig' => 'ExampleCaptcha'
        ))
        ->add('Do some shiz wif my email bruh.', SubmitType::class)
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        return $this->redirect('/unblock/'.$email);
    }

Проблема в том, что их документация определяет ограничение проверки в сущности. В моем приложении нет объектов (пока), но я хотел бы узнать, нашел ли кто-нибудь способ проверки капчи с контроллера?

Я в порядке, добавляя его к своим сущностям при их создании, но мне интересно, как это будет сделано в приложении, которое не имеет никаких сущностей или не имеет подключения к базе данных.

1 ответ

Решение

Я закончил тем, что использовал пакет beelabs google recaptcha от packagist (если кому-то интересно) по ссылке: https://packagist.org/packages/beelab/recaptcha2-bundle

Их документация расскажет вам практически все, что вам нужно знать об установке и настройке.

Единственным недостатком является то, что он по-прежнему позволяет отправлять форму, даже если вы не установили флажок "Я не робот", поэтому вам нужно будет проверить, была ли она нажата в конце PHP.

Вы можете использовать это, чтобы получить ответ, который обычно является либо хешем, либо пустым полем.

$recaptcha = $request->get('g-recaptcha-response', '');
use Captcha\Bundle\CaptchaBundle\Validator\Constraints\ValidCaptcha;

    $form = $this->createFormBuilder()
     ->add('captchaCode', CaptchaType::class, [
                    'captchaConfig' => 'LoginCaptcha',
                    'constraints' => [
                        new ValidCaptcha([
                            'message' => 'CAPTCHA validation failed, try again.'
                        ])
                    ]
                ]);
Другие вопросы по тегам