2015-04-16 6 views
1

У меня есть два веб-сайта (оба мои), и я тестирую Guzzle.Использование Goutte/Guzzle с Laravel для отправки формы с CSRF

Я пытаюсь отправить форму поиска. Эта форма поиска имеет стандартное скрытое поле маркера Laravel CSRF, автоматически генерируемое «_token».

При отправке поля с помощью goutte появляется ошибка. Проверяя мои журналы на веб-сайте, я вижу, что это Laravel «TokenMismatchException»

Нужно ли делать что-то особенное в goutte, чтобы убедиться, что оно отправляет автоматически созданное скрытое поле «_token»?

+0

если вы счастливы с моим ответом ниже, вы можете принять его :) –

ответ

1

Вам необходимо отключить защиту CSRF для этого маршрута.

В app/Http/Middleware/VerifyCsrfToken.php добавить этот код в начало handle() метода:

$openRoutes = ['free/route', 'free/too']; 

foreach($openRoutes as $route) { 
    if ($request->is($route)) { 
     return $next($request); 
    } 
} 
+0

Спасибо, я думаю, что это вариант. В этой ситуации CSRF действительно не требуется в обычной форме поиска. Но в будущем, что, если я пытаюсь войти на мой сайт и не хочу отключать токен, каковы мои варианты? Я предположил, что, поскольку поле предварительно заполнено, оно будет просто отправлено в поле поиска. – Jay

+1

Если я правильно понимаю ваш вопрос, вам не нужно беспокоиться, так как с помощью этого кода вы отключите защиту CSRF только для этого маршрута. В других формах защита CSRF будет работать как обычно. –

+0

К сожалению, я имел в виду, что если я хочу использовать Goutte/Guzzle для входа в систему, не удаляя CSRF (вместо простого простого поиска, например, выше) – Jay

2

По Laravel 5.1, в app/Http/Middleware/VerifyCsrfToken.php вы можете отключить защиту CSRF, добавив заинтересованный маршрут к $except массиву. Как так:

protected $except = [ 
    '/api/v1/list', //This route won't have CSRF protection 
];