Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
При отправки запроса из формы, не выводится содержимое переменной $_POST.
Выводит ошибку:
TokenMismatchException in compiled.php line 3227:
1. in compiled.php line 3227
2. at VerifyCsrfToken->handle(object(Request), object(Closure))
3. at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in compiled.php line 9963
app/Http/routes.php
Route::post('/comments', function () {
print_r($_POST);
});
public/form.html
<form action="/comments" method="POST">
Имя:
<input type="text" name="name" ><br>
Комментарий:<br>
<textarea name="text"></textarea><br>
<input type="submit" value="Добавить">
</form>
Поискал в чем проблема и все ссылается на csrf. Что это, для чего это? Туда смотрю?
Предложили сделать так, но не работает:
<input type="hidden" name="_token" value="{{ csrf_token() }}">
Я полный новичок, только начал изучать.
Не в сети
Нашел решение:
app/Http/Middleware/VerifyCsrfToken.php
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//тут прописываем маршруты которые хотим исключить
'comments/*',
];
}
Не в сети
Csrf токен используется для предотвращения атак на ваш сайт. Добавлять рут на добавление комментариев в исключение - ужасная затея. Вкратце, вы должны при каждом пост запросе отправлять уникальный токен.
https://laravel.com/docs/5.8/csrf
Не в сети
На самом деле надо было не отказываться от посредника CSRF, а добавить в форму поле с токеном, чтобы посредник мог его использовать. Если внезапно и это не поможет, значит проблема в сессии, потому что для проверки токена нужна сессия. Без сессии вам вообще ВСЁ придется поотключать
Короче, старайтесь придерживаться стандартных путей, а не громоздить костыли. Отступать от шаблонов могут только гуру 80-го уровня.
Не в сети