В 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'
];