Подтвердить что ты не робот

Использование Securimage captcha с Laravel 5.3

Я установил пакет laravel для securimage captcha, все кажется прекрасным (как в нем показывает случайную капчу), но даже после размещения правильного текста он все еще говорит о недопустимости. Может кто-то мне помочь, пожалуйста. Вот мой код

Route::any('/test-captcha', function (){
    if (Request::getMethod() == 'POST')
    {
        $rules = ['captcha' => 'required|captcha'];

        $validator = Validator::make(Input::all(), $rules);
        if ($validator->fails())
        {
            echo '<p style="color: #ff0000;">Incorrect!</p>';
        }
        else
        {
            echo '<p style="color: #00ff30;">Matched :)</p>';
        }
    }

    $form = '<form method="post" action="test-captcha">';
    $form .= '<input type="hidden" name="_token" value="' . csrf_token() . '">';
    $form .= '<p>' . captcha_img() . '</p>';
    $form .= '<p><button type="submit" name="check">Check</button></p>';
    $form .= '</form>';
    return $form;
});
4b9b3361

Ответ 1

Короткое разрешение: Добавьте эти строки в файл routes.php:

Route::get('securimage', ['as' => 'securimage', 'uses' => '\Yhbyun\Securimage\[email protected]']);

Route::get('securimage/audio', ['as' => 'securimage.audio', 'uses' => '\Yhbyun\Securimage\[email protected]']);

Route::get('securimage/check', ['as' => 'securimage.check', 'uses' => '\Yhbyun\Securimage\[email protected]']);

Здесь я объясню, почему

Проблема в этом случае заключается в том, что пакет определяет свои маршруты в   /vendor/yhbyun/laravel-securimage/src/SecurimageServiceProvider.php следующим образом:

        $app['router']->get('securimage', ['as' => 'securimage', 'uses' => 'Yhbyun\Securimage\[email protected]']);

        $app['router']->get('securimage/audio', ['as' => 'securimage.audio', 'uses' => 'Yhbyun\Securimage\[email protected]']);

        $app['router']->get('securimage/check', ['as' => 'securimage.check', 'uses' => 'Yhbyun\Securimage\[email protected]']);

Если вы запустите php artisan route:list, вы увидите, что не применяется промежуточное ПО, поскольку в файле Laravel Kernel.php только маршруты, определенные в route.php, сгруппированы с использованием промежуточного программного обеспечения "web":

    Route::group([
        'middleware' => 'web',
        'namespace' => $this->namespace,
    ], function ($router) {
        require base_path('routes/web.php');
    });

Группа промежуточного программного обеспечения содержит промежуточное ПО для запуска сеансов:

    'web' => [
        // ....
        \Illuminate\Session\Middleware\StartSession::class,
        // .....
    ],

Возможно, кто-то хочет создать запрос на растяжение для версий Laravel, которые уже используют промежуточное программное обеспечение "web". Это может быть что-то вроде (внутри SecurimageServiceProvider.php):

    $app['router']->group(['middleware' => 'web'], function() use ($app) {
        $app['router']->get('securimage', ['as' => 'securimage', 'uses' => 'Yhbyun\Securimage\[email protected]']);

        $app['router']->get('securimage/audio', ['as' => 'securimage.audio', 'uses' => 'Yhbyun\Securimage\[email protected]']);

        $app['router']->get('securimage/check', ['as' => 'securimage.check', 'uses' => 'Yhbyun\Securimage\[email protected]k']);
    });