Intereting Posts
php erro с удалением в таблице mysql Показать видео и миниатюры Youtube в правильном формате 9:16 Отбрасывание десятичных знаков PHP без округления Использовать каждое слово строки в PHP? Как вставить входной массив html в mysql, используя PDO Как я могу построить запрос на основе условий в laravel Можно ли изменить сообщение перенаправления по умолчанию в Symfony? Включение файлов из включенного пути не работает должным образом Передача переменной JQuery в php в модальном Чтение значения из JSON с использованием PHP PHP – альфа сортирует строки из нескольких файлов в одном каталоге и сохраняет их в файлах с максимальными строками «x» в папках с именованными именами Сброс PHP mysqli_result Потеря данных при отправке через $ _SESSION из одного сценария в другой WordPress – выбор информации о пользователе с помощью запроса jQuery ajax POST PHP сравнить массив символов HTML Решение

Laravel TokenMismatchException

Прямо сейчас я лечу laravel, но я продолжаю получать освобождение:

TokenMismatchException в строке VerifyCsrfToken.php 53:

Я пытаюсь создать объект миграции, а затем записываю его в базу данных, но по какой-то причине он не работает. Это мой route.php:

Route::get('/post/new',array( 'uses'=> 'blog@newPost', 'as' => 'newPost' )); Route::post('/post/new', array ( 'uses' => 'blog@createPost', 'as' => 'createPost' )); 

Это мой контроллер, называемый blog.php:

используйте Illuminate \ Http \ Request;

 use App\Http\Requests; use View; use App\Http\Controllers\Controller; use App\posts; class blog extends Controller { public function newPost() { return View::make('new'); } public function createPost() { $posts = new posts(); $posts->title = Input::get('title'); $posts->content = nl2br(Input::get('content')); $posts->save(); } } 

Это миграция:

 <?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts',function($table) { $table->increments('id'); $table->string('title'); $table->text('content'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { schema::drop('posts'); } } 

И это мой главный взгляд:

 @extends('master') @section('content') <h3>Add a blog post</h2> <form action="{{ URL::route('createPost') }}" method="post"> <div class="form-group"> <input name="title" class="form-control" type="text" placeholder="title"/> </div> <div class="form-group"> <textarea name="content" class="form-control" placeholder="write here"> </textarea> </div> <input type="submit" class="btn btn-primary" /> </form> @stop 

Что может быть неправильным?

Добавьте эту строку перед закрывающим тегом формы:

 {{ Form::token() }} 

Добавьте это прямо перед </form>

 {!! csrf_field() !!} 

Взгляните на документы Laravel для получения дополнительной информации

Чтобы предотвратить атаки на ваше приложение laravel, laravel добавляет токен CSR к вашей форме, который проверяется, когда форма отправляется на стороне сервера в качестве параметра безопасности, поэтому, если вы получаете эту ошибку, означает, что ваша форма не содержит токена CSR, поэтому для включения токена в вашей форме вы можете использовать {{ crsf_token() }} //blade option или <?php echo csrf_token();//Core PHP option ?>

или

В некоторых случаях вы можете отключить проверку токена CSR на своей странице, тогда вы можете это сделать, отредактировав файл app / Http / Middleware / VerifyCsrfToken.php и добавьте URL-адрес в массив, но НЕ СДЕЛАЙТЕ ЭТО, ЕСЛИ ЕСТЬ ТОЛЬКО ВАРИАНТ не рекомендуется, потому что он отключает функцию безопасности laravel.

Я вижу, что этот вопрос был разрешен, но подумал об обмене этой информацией.

Защита CSRF

Laravel по умолчанию обрабатывает C ross S ite R equest F orgeries. Перед публикацией любых форм из нашего приложения нам нужно добавить токен CSRF, чтобы указать активный сеанс пользователя. Этот токен проверяется для определения подлинности пользователя, отправляющего его.

Добавление токена CSRF

Внутри формы мы могли бы хранить скрытое поле, значение которого также будет символом csrf:

(шаблон клинка)

 <input type="hidden" name="_token" value="{{ csrf_token() }}"> 

В моей заявке (Laravel 5.1) я использовал illuminate/html фасады. Когда я добавляю форму, как показано ниже, метод Form::open автоматически добавит указанное выше скрытое поле в эту форму.

 {!! Form::open(array('action' => 'TestController@index','method' => 'POST'))!!} 

Вы можете заметить в файле Middleware/VerifyCsrfToken.php , функция была определена для проверки соответствия маркера.

CSRF В запросе AJAX

Для запроса AJAX в вашем приложении вы можете передать токен CSRF вместе с сообщением ajax. Храните токен в метатеге.

 <meta name="csrf-token" content="{{ csrf_token() }}" /> 

В Ajax Call

 $.ajax({ url: '/postAjaxUrl', type: 'POST', dataType: 'json', data: {user_id: 10}, success: function(response) { console.log(response); }, beforeSend: function (request) { return request.setRequestHeader('X-CSRF-Token', $("meta[name='csrf-token']").attr('content')); } }); 

ИЛИ

 $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); // This will automatically include the CSRF token in all ajax request 

Надеюсь, это полезно. 🙂

я знаю, вопрос уже ответил, но это добавить дополнительную информацию с ответом,

Это связано с тем, что вы не передаете маркер безопасности вместе с вашими данными формы. пожалуйста, используйте

 {{ Form::open(array('url' => 'foo/bar')) }} ........ ........ {{ Form::close() }} 

Laravel обеспечивает простой способ защиты вашего приложения от подделок с использованием межсайтовых запросов. Во-первых, случайный токен помещается в сеанс пользователя. Если вы используете метод Form :: open с POST, PUT или DELETE, токен CSRF будет автоматически добавлен в ваши формы как скрытое поле. Кроме того, если вы хотите сгенерировать HTML для скрытого поля CSRF, вы можете использовать метод токена:

 echo Form::token(); 

вы можете найти полную документацию по этой ссылке http://laravel.com/docs/4.2/html