Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Вы абсолютно правы: статус 419 в Laravel почти всегда указывает на ошибку CSRF-токена (Cross-Site Request Forgery).
В вашем коде теста вы явно передаете статическое значение '_token'=>'kHwQvTEH6mRxCgKDyJtEb2op6vxtCxKRJyqXK61w'. Это не сработает, потому что Laravel ожидает, что токен в сессии будет соответствовать токену, переданному в запросе.
Что делать:
Удалите статическую строку токена из запроса.
Используйте метод withToken() перед отправкой POST-запроса, чтобы Laravel автоматически сгенерировал и прикрепил действительный CSRF-токен к сессии и запросу.
Исправленный код теста:
PHP
public function testEditUserGeneralInfo()
{
$response = $this->actingAs($this->user)
->withSession(['foo' => 'bar'])
// Используйте withToken(), чтобы Laravel корректно обработал CSRF
->withHeaders([
'X-CSRF-TOKEN' => csrf_token(), // Или просто используйте withToken()
])
->post('/editUserGeneralInfo', [
// Удалите '_token' => '...' отсюда
'id'=>'2',
'name'=>'asdasdasd',
'workplace'=>'test',
'mobile'=>'12345',
'adress'=>'test address'
]);
// Если тест проходит, вы получите статус 302 (редирект после успешного обновления)
dd($response->status());
}
// ПРИМЕЧАНИЕ: Самый простой способ в тестах — использовать withHeaders:
public function testEditUserGeneralInfo()
{
$response = $this->actingAs($this->user)
// Laravel автоматически добавит валидный токен в заголовки
->followingRedirects() // Удобно для проверки итогового статуса 200/403
->post('/editUserGeneralInfo', [
'id' => '2',
'name' => 'asdasdasd',
// ... другие поля
]);
dd($response->status()); // Ожидаем 302 (если Gate проходит)
}
Используйте метод withToken() или, что еще проще, просто отправляйте POST-запрос без поля _token в данных, но с заголовком X-CSRF-TOKEN, который Laravel часто обрабатывает автоматически в тестах. Если withHeaders не работает, просто попробуйте убрать статичный токен:
PHP
public function testEditUserGeneralInfo()
{
$response = $this->actingAs($this->user)
->post('/editUserGeneralInfo', [
// Удалите статичный токен! Laravel сам его обработает в тестах.
// '_token'=>'kHwQvTEH6mRxCgKDyJtEb2op6vxtCxKRJyqXK61w',
'id'=>'2',
'name'=>'asdasdasd'
]);
dd($response->status());
}
После этого вы должны увидеть статус 302 (редирект), который вы ожидали. https://www.hha-exchange.com
Страницы 1