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