В Laravel 5, Как отключить промежуточное ПО VerifycsrfToken для определенного маршрута?

Я использую Laravel 5 для разработки приложения. Мое приложение связано с VENDHQ API, и я намерен получить некоторые данные из VendHQ через их веб-крючок. Согласно их документация

когда событие происходит и запускает webhook, мы отправим сообщение запрос на URL по вашему выбору. Запрос POST будет в Кодировка UTF-8 и кодировка application/x-www-form-urlencoded.

проблема в том, когда они пытаются отправить POST request to my Laravel app, токен CSRF не добавляется в их post request и VerifyCsrfToken middleware ищет токен, и, наконец, он бросает TokenMismatchException.

мой вопрос в том, как я могу избежать этого по умолчанию VerifyCsrfToken промежуточное ПО для некоторых конкретных маршрутов, сохраняя при этом другие запросы post активными?

4 ответов


CSRF включен по умолчанию на всех маршрутах в Laravel 5, Вы можете отключить его для определенных маршрутов, изменив app/Http/Middleware / VerifyCsrfToken.в PHP

//app/Http/Middleware/VerifyCsrfToken.php

//add an array of Routes to skip CSRF check
private $openRoutes = ['free/route', 'free/too'];

//modify this function
public function handle($request, Closure $next)
    {
        //add this condition 
    foreach($this->openRoutes as $route) {

      if ($request->is($route)) {
        return $next($request);
      }
    }

    return parent::handle($request, $next);
  }

источник


в фреймворк Laravel 5 это chagned немного. Теперь вы можете просто добавить маршруты, которые вы хотите исключить из проверки csrftoken, в $except массив класс

' VerifyCsrfToken '(\app\Http\Middleware\VerifyCsrfToken.php):

class VerifyCsrfToken extends BaseVerifier
{
    protected $except = [
        // Place your URIs here
    ];
}

примеры:

1. Если вы используете группу маршрутов:

Route::group(array('prefix' => 'api/v2'), function()
{
    Route::post('users/valid','UsersController@valid');
});

код $except массив выглядит так:

protected $except = ['api/v2/users/valid'];

2. Если вы используете простой маршрут

Route::post('users/valid','UsersController@valid');

код $except массив выглядит так:

protected $except = ['users/valid'];

3. Если вы хотите исключить все маршруты под основным маршрутом (пользователи в этом случае)

код $except массив выглядит так:

protected $except = ['users/*'];

см.:http://laravel.com/docs/master/routing#csrf-excluding-uris


Если вы используете версию 5.2, то в: app / Http/Middleware / VerifyCsrfToken.РНР вы можете добавить маршрут к атрибуту: protected $except: Например:

protected $except = [
'users/get_some_info',
];

пользователи части будут вашим контроллером," get_some_info " будет действием. После выполнения этого изменения убедитесь,что маршрут добавлен в маршруты.РНР.


добавьте свой маршрут в :

/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'route-name-1', 'route-name-2'
];