В Laravel5, Как отключить промежуточное программное обеспечение VerifycsrfToken для определенного маршрута?

Я использую Laravel5 для разработки приложения. Мое приложение связано с VendHQ API, и я собираюсь получить некоторые данные из VendHQ через их webhook. Согласно их Documentation

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

Проблема заключается в том, что когда они пытаются отправить запрос POST в мое приложение Laravel, в их почтовом запросе добавляется NO токен CSRF и VerifyCsrfToken промежуточное программное обеспечение ищет маркер и, наконец, бросает TokenMismatchException.

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

Ваша забота оценена и TIA
Ariful

Ответ 1

CSRF включен по умолчанию во всех Маршрутах в Laravel 5, вы можете отключить его для определенных маршрутов, изменив приложение /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);
  }

источник

Ответ 2

В Laravel 5 это немного замялось. Теперь вы можете просто добавить маршруты, которые хотите исключить из проверки 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','[email protected]');
});

Ваш массив $except выглядит следующим образом:

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

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

Route::post('users/valid','[email protected]');

Ваш массив $except выглядит следующим образом:

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

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

Ваш массив $except выглядит следующим образом:

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

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

Ответ 3

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

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

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

Ответ 4

Добавьте свой маршрут в App\Http\Middleware\VerifyCsrfToken.php файл:

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