МЕНЮ

Необходимо войти,чтобы получить возможность оценивать записи.

Войти

Капча with Laravel

www.radiobells.com #radiobells_script_hash

0 0

Капча with Laravel


Один из самых простых и эффективных способов защиты от ботов – это капча. Давайте  сразу к делу и поставим перед ботами стену. Установим при регистрации пользователя на сайте под управлением Laravel проверку капчи. Сперва установим специальный пакет, прописав в composer команду:

   composer require mews/captcha

Я использую phpstorm, поэтому я поступлю так: 

 
 

 Теперь в поиске найду необходимую зависимость:

 
 

Следующим шагом добавляем провайдер и алиас для капчи. Для этого открываем файл config/app.php и вставляем следующие строки:

 'providers'=>[
         // ...
         Mews\Captcha\CaptchaServiceProvider::class\,
    ];
    'aliases'=>[;
        // ...
        'Captcha'=>Mews\Captcha\Facades\Captcha::class,
     ];

Конфигурация

Для начала создадим файл конфигурации капчи, прописав следующую команду .

   artisan vendor:publish

В phpstorm: Tools/Run Command

 
 

 В итоге создастся файл со следующим содержимым:


return [

    'default'   => [
        'length'    => 4,
        'width'     => 120,
        'height'    => 56,
        'quality'   => 90,
    ],

    'flat'   => [
        'length'    => 6,
        'width'     => 160,
        'height'    => 46,
        'quality'   => 90,
        'lines'     => 6,
        'bgImage'   => false,
        'bgColor'   => '#ecf2f4',
        'fontColors'=> ['#2c3e50', '#c0392b', '#16a085', '#c0392b', '#8e44ad', '#303f9f', '#f57c00', '#795548'],
        'contrast'  => -5,
    ],

    'mini'   => [
        'length'    => 3,
        'width'     => 60,
        'height'    => 32,
    ],

    'inverse'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
        'sensitive' => true,
        'angle'     => 12,
        'sharpen'   => 10,
        'blur'      => 2,
        'invert'    => true,
        'contrast'  => -5,
    ]

];

Здесь можно задать количество отображаемых символов(length), высоту(height) и ширину(width) капчи, размытие(blur), чувствительность к регистру(sensetive), допустимый угол поворота символа(angle). Для нас уже подготовили  4 готовых варианта. По умолчанию используется default.

Разметка

Добавьте к вашему коду. Ну или подправьте как вам удобно. Суть в том, что на тег <а > с id =''refresh'' будет повешен обработчик ''click'', а функция captcha_src() будет менять капчу.

<div class="   form-group text-center">
        <label for="captcha" class="col-md-4 control-label" style="padding-top: 16px;">Капча</label>
        <img src="{{ captcha_src() }}" alt="captcha" class="captcha-img" data-refresh-config="default">
        <a href="#" id="refresh">
            <span  class="glyphicon glyphicon-refresh"></span>
        </a>
    </div>
    <div class="clearfix"></div>
    <div class="form-group{{ $errors->has('captcha') ? ' has-error' : '' }}">
        <label for="captcha" class="col-md-10 col-md-offset-1">Введите капчу</label>
        <div class="col-md-10 col-md-offset-1">
            <input class="form-control" type="text" name="captcha" id="captcha"/>
            @if ($errors->has('captcha'))
                <span class="help-block">
                                        <strong>{{ $errors->first('captcha') }}</strong>
                                    </span>
            @endif
        </div>
    </div>

Валидация

Я предпочитаю валидировать данные в специальном классе Request

artisan make:request  RegisterRequest

Добавим необходимые правила валидации. В методе autorize не забудьте вернуть true. 

namespace Wan\Http\Requests;

use Wan\Http\Requests\Request;

class RegisterRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'email'=>'required|email|max:255',
            'password'=>'required|min:6',
            'captcha' => 'required|captcha',
        ];
    }

    public function messages()
    {
        return[
            'captcha.captcha'=>'Неверная капча',
            'captcha.required'=>'Введите капчу',
        ];
    }
}

 Также не забудьте в контроллере внедрить зависимость от нашего  нового класса RegisterRequest. Код контроллера я не буду расписывать, урок не об этом

 public function register(RegisterRequest $request)
    {
        // your code
    }

Обновление капчи, jQuery

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

$('.wrapEmailAdd').on('click','#refresh',function(){
        var captcha = $('img.captcha-img');
        var config = captcha.data('refresh-config');
        $.ajax({
            method: 'GET',
            url: '/get_captcha/' + config,
        }).done(function (response) {
            captcha.prop('src', response);
        });
    });

Route

Осталось добавить обработчик маршрута обновления капчи,

Route::get('/get_captcha/{config?}', function (\Mews\Captcha\Captcha $captcha, $config = 'default') {
    return $captcha->src($config);
});

Готово

 

ОСТАВИТЬ КОММЕНТАРИЙ