Я получаю TokenMismatch
в Ajax Submit, когда я отправляю форму, это дает мне ошибку. Здесь я использую Laravel 5.2
. Где я прохожу X-CSRF-TOKEN
при вызове ajax. Установите Token on on meta по default.blade.php
. default.blade.php
. Я пробовал все возможные решения от StackOverflow
.
Route::group(['middleware' => ['web','auth']], function () {
token
в заголовок функции ajax. token
внутри формы. Может ли кто-нибудь найти решение из-под кода.
Любая идея, где я ошибаюсь? Любая помощь будет оценена
Ниже приведена моя категория HTML-форма category.blade.php
:
<form method="POST" name="category-add-form" id="category-add-form" action="{{route("category-add")}}" accept-charset="UTF-8"> {{csrf_field()}} <div class="form-group"> <label for="title">Category Title:</label> <input class="form-control" name="category_title" type="text" value="" id="category_title"> </div> <div class="form-group"> <label for="body">Description:</label> <textarea class="form-control" name="category_description" cols="50" rows="10" id="category_description"></textarea> </div> <div class="form-group"> <input class="btn btn-primary form-control" type="submit" value="Add CAtegory"> </div> </form>
Ниже id my app.js
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });
Ниже приведена моя category-add.js
вот мой код ajax. Я не включил целую функцию.
var request; var $inputs = $("#category-add").find("input, select, button, textarea"); var formData = new FormData($("#category-add")[0]); request = $.ajax({ url: $("#category-add").attr("action"), type: "POST", data: formData, processData: false, contentType: false, dataType: "json", headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); request.done(function (response, textStatus, jqXHR) { //Notification.init(response.message); //App.unblockUI('.block-panel-box'); }); request.error(function (response, textStatus, jqXHR) { //App.unblockUI('.block-panel-box'); }); request.always(function () { $inputs.prop("disabled", false); });
Ниже мой default.blade.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Test Project</title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta content="width=device-width, initial-scale=1" name="viewport" /> <meta name="csrf-token" content="{{csrf_token()}}"> <link href="http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,700&subset=all" rel="stylesheet" type="text/css" /> <link href="{{asset("public/css/font-awesome.min.css")}}" rel="stylesheet" type="text/css" /> <link href="{{asset("public/css/simple-line-icons.min.css")}}" rel="stylesheet" type="text/css" /> <link href="{{asset("public/css/bootstrap.min.css")}}" rel="stylesheet" type="text/css" /> <link href="{{asset("public/css/components-md.min.css")}}" rel="stylesheet" id="style_components" type="text/css" /> <link href="{{asset("public/css/plugins-md.min.css")}}" rel="stylesheet" type="text/css" /> <link href="{{asset("public/css/layout.min.css")}}" rel="stylesheet" type="text/css" /> <link href="{{asset("public/css/blue.min.css")}}" rel="stylesheet" type="text/css" id="style_color" /> <link href="{{asset("public/css/responsive.css")}}" rel="stylesheet" type="text/css" /> <link rel="shortcut icon" href="favicon.ico" /> </head> <body class="page-header-fixed page-sidebar-closed-hide-logo page-container-bg-solid page-sidebar-closed page-md"> @include('user.layout.header') <div class="clearfix"> </div> <div class="page-container"> @include('user.layout.sidebar') <div class="page-content-wrapper"> @yield('content') </div> </div> @include('user.layout.footer') <div class="quick-nav-overlay"></div> <script src="{{asset("public/js/jquery.min.js")}}" type="text/javascript"></script> <script src="{{asset("public/js/bootstrap.min.js")}}" type="text/javascript"></script> <script src="{{asset("public/js/jquery.slimscroll.min.js")}}" type="text/javascript"></script> <script src="{{asset("public/js/app.min.js")}}" type="text/javascript"></script> <script src="{{asset("public/js/category-add.js")}}" type="text/javascript"></script> </body> </html>
Ниже приведен файл маршрутной маршрутизации route.php
Route::group(['middleware' => ['web','auth']], function () { Route::post('/category-add', array("as" => "category-add","uses" => "CategoryController@store")); });
Ниже приведена моя CategoryController.php
class CategoryController extends Controller { public function store(Request $request) { $inputs = $request->all(); $category = Category::create($inputs); if($category){ $responseArray = array("status"=>true,"message"=>"Category successfully created"); } else { $responseArray = array("status"=>false,"message"=>"Could not add category please try again later"); } return response()->json($responseArray); } }
Ниже представлен мой файл .env
APP_ENV=local APP_DEBUG=true APP_KEY=base64:ratSluNv930gb3wp1UOabW6Ze3jEJn3ixtTX/wgqYZc= APP_URL=http://project.dev/ts/cart-products DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=cart-products DB_USERNAME=hellocart DB_PASSWORD=j@yshre33r@m CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync
Ниже представлен файл config/session.php
return [ 'driver' => env('SESSION_DRIVER', 'file'), 'lifetime' => 120, 'expire_on_close' => false, 'encrypt' => false, 'files' => storage_path('framework/sessions'), 'connection' => null, 'table' => 'sessions', 'lottery' => [2, 100], 'cookie' => 'cart-products', 'path' => '/ts/cart-products', //Change path variable URL form '/cart-products' to '/ts/cart-products' 'domain' => null, 'secure' => false, 'http_only' => true, ];
Ниже мой Kernal.php
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ], 'api' => [ 'throttle:60,1', ], ];
В вашем случае вы неправильно настроили путь cookie сеанса в config / session.php к подкаталогу sub, поскольку проект не находится в корне вашего домена.
Поэтому, если ваш APP_URL – http://project.dev/ts/cart-products
то ваш путь в config / session.php должен быть следующим:
'path' => '/ts/cart-products'
вы забыли добавить '/ ts'.
Я думаю, вы должны ввести «_token» в данные будут отправлены. Как это
data : { '_token' : "{{ csrf_token() }}", 'data' : formData }
Я попытался бы удалить запись «помощников» в категории-add.js, а затем скопировать «ajaxSetup» в тот же файл, bevor отправить запрос ajax.
<div class="quick-nav-overlay"></div> <script src="{{asset("public/js/jquery.min.js")}}" type="text/javascript"></script> <script src="{{asset("public/js/bootstrap.min.js")}}" type="text/javascript"></script> <script src="{{asset("public/js/jquery.slimscroll.min.js")}}" type="text/javascript"></script> <script type="text/javascript"> var _token = "{{ csrf_token() }}"; </script> <script src="{{asset("public/js/app.min.js")}}" type="text/javascript"></script> <script src="{{asset("public/js/category-add.js")}}" type="text/javascript"></script>
Как вы можете видеть, я добавил var _token = "{{csrf_token ()}}"; перед вашими файлами js, поэтому вы можете повторно использовать эту переменную в любом js-файле, который реализуется в этом клиенте, и в ajax вы просто так:
request = $.ajax({ url: $("#category-add").attr("action"), type: "POST", data: { '_token' : _token, 'data' : formData }, processData: false, contentType: false, dataType: "json" });
Следуйте шагу
папка проекта / приложение / http / kernal.php
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, // \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ 'throttle:60,1', 'bindings', ], ];
поместите эту строку в комментарий
\ App \ Http \ Middleware \ VerifyCsrfToken :: класс,
вы можете установить X-CSRF-TOKEN
таким образом. подробнее см. официальный сайт laravel
<meta name="csrf-token" content="{{ csrf_token() }}"> $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });