Для Laravel 4 используйте ветку v1.
composer require anhskohbo/no-captcha
ПРИМЕЧАНИЕ. Этот пакет поддерживает функцию автоматического обнаружения Laravel 5.5 и более поздних версий. Поэтому пропустите эти инструкции Setup
если вы используете Laravel 5.5 и более поздние версии.
В app/config/app.php
добавьте следующее:
1- Поставщик услуг для массива поставщиков:
AnhskohboNoCaptchaNoCaptchaServiceProvider::class,
2- Псевдоним класса для массива псевдонимов:
'NoCaptcha' => AnhskohboNoCaptchaFacadesNoCaptcha::class,
3- Опубликовать файл конфигурации
php artisan vendor:publish --provider="AnhskohboNoCaptchaNoCaptchaServiceProvider"
Добавьте NOCAPTCHA_SECRET
и NOCAPTCHA_SITEKEY
в файл .env :
NOCAPTCHA_SECRET=secret-key NOCAPTCHA_SITEKEY=site-key
(Вы можете получить их здесь)
С параметрами по умолчанию:
{!! NoCaptcha::renderJs() !!}
С языковой поддержкой или опцией onloadCallback:
{!! NoCaptcha::renderJs('fr', true, 'recaptchaCallback') !!}
Виджет по умолчанию:
{!! NoCaptcha::display() !!}
С настраиваемыми атрибутами (тема, размер, обратный вызов...):
{!! NoCaptcha::display(['data-theme' => 'dark']) !!}
Невидимый reCAPTCHA с помощью кнопки отправки:
{!! NoCaptcha::displaySubmit('my-form-id', 'отправить сейчас!', ['data-theme' => 'dark']) !!}
Обратите внимание, что в этом методе требуется идентификатор формы, чтобы позволить автоматически сгенерированному обратному вызову отправить форму при успешной проверке капчи.
Добавьте 'g-recaptcha-response' => 'required|captcha'
в массив правил:
$validate = Validator::make(Input::all(), [ 'g-recaptcha-response' => 'required|captcha']);
Добавьте следующие значения в custom
массив в файле языка validation
:
'custom' => ['g-recaptcha-response' => ['required' => 'Пожалуйста, подтвердите, что вы не робот.','captcha' => 'Ошибка капчи! повторите попытку позже или свяжитесь с администратором сайта.', ], ],
Затем проверьте наличие ошибок капчи в Form
:
@if ($errors->has('g-recaptcha-response')) <span class="help-block"> <strong>{{ $errors->first('g-recaptcha-response') }}</strong> </span> @endif
При использовании функции тестирования Laravel вам нужно будет смоделировать ответ на элемент формы капчи.
Таким образом, для любых тестов формы, включающих капчу, вы можете сделать это, имитируя поведение фасада:
// предотвращаем ошибку проверки captchaNoCaptcha::shouldReceive('verifyResponse') -> однажды() ->andReturn(true);// предоставляем скрытый ввод для вашей «обязательной» проверки NoCaptcha::shouldReceive('display') ->zeroOrMoreTimes() ->andReturn('<input type="hidden" name="g-recaptcha-response" value="1" />');
Затем вы можете протестировать остальную часть формы как обычно.
При использовании HTTP-тестов вы можете добавить g-recaptcha-response
в тело запроса для «обязательной» проверки:
// предотвращаем ошибку проверки captchaNoCaptcha::shouldReceive('verifyResponse') -> однажды() ->andReturn(true);// POST-запрос, тело запроса включает g-recaptcha-response$response = $this->json('POST', '/register', ['g-recaptcha-response' => ' 1','name' => 'Джон','email' => '[email protected]','пароль' => '123456','password_confirmation' => '123456', ]);
Пример оформления заказа ниже:
<?phprequire_once "vendor/autoload.php";$secret = 'CAPTCHA-SECRET';$sitekey = 'CAPTCHA-SITEKEY';$captcha = new AnhskohboNoCaptchaNoCaptcha($secret, $sitekey);if (! пустой($_POST) ) {var_dump($captcha->verifyResponse($_POST['g-recaptcha-response']));exit(); }?><form action="?" метод="POST"><?php echo $captcha->display(); ?><button type="submit">Отправить</button> </form><?php echo $captcha->renderJs(); ?>
https://github.com/anhskohbo/no-captcha/pulls