在laravel 5.3中使用Securimage验证码

托尼

我为securimage验证码安装了一个laravel软件包,一切似乎都很好(如其中显示了随机验证码),但是即使在输入正确的文本后,它仍然表示无效。有人能帮助我吗。这是我的代码

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;
});
shock_gone_wild

简短的解决方案:将此行添加到您的route.php文件:

Route::get('securimage', ['as' => 'securimage', 'uses' => '\Yhbyun\Securimage\SecurimageController@getCaptcha']);

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

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

我在这里解释,为什么

这种情况下的问题是,程序包在/vendor/yhbyun/laravel-securimage/src/SecurimageServiceProvider.php中定义其路由,如下所示:

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

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

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

如果运行php artisan route:list,则可以看到没有应用中间件,因为在Laravel的Kernel.php文件中,仅将routes.php中定义的路由与应用的“ web”中间件组合在一起:

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

Web中间件组包含用于启动会话的中间件:

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

也许有人想为已经使用“网络”中间件的Laravel版本创建拉取请求。可能是这样的(在SecurimageServiceProvider.php内部):

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章