簡體   English   中英

Laravel 5.2 Ajax調用中的TokenMismatchException

[英]TokenMismatchException in laravel 5.2 ajax call

我正在獲得令牌不匹配異常,每件事似乎都是正確的。

這是我的查看代碼

@extends('layouts.master')
@section('content')
<div class="bg"></div>
<div class="login-sec clearfix">

    <h1 class="lg-logo">YOU ARE JUST ONE STEP AHEAD</h1>
    <div class="login-box clear">

        <form id="websiteform" action="#">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <div class="col-md-12 form-field">
                <label for="">Project Name</label>
                <input type="text" name="project" id="project">
            </div>

            <div class="col-md-12 form-field">
                <label for="">Website URL</label>
                <input type="url" name="website_url" id="website_url">
            </div>

            <div class="col-md-12 form-field">
                <button type="submit" class="btn-green btn-large">Add Your Website</button>
            </div>
        </form>

    </div>
</div>
@stop

並形成源頭節和頁腳為

  <head>
   <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<meta name="csrf-token" content="4ryCSznz0mPSBcwXvbmZZHkZGcxZpyDy2dQ1VAoc" />
<link href="http://localhost:8080/css/bootstrap.min.css" rel="stylesheet" media="screen">

 <script src="http://localhost:8080/js/jquery.min.js"></script>
<script src="http://localhost:8080/js/bootstrap.min.js"></script>
<script src="http://localhost:8080/js/main.js"></script>

和我在main.js中的ajax調用

$(document).ready(function () {

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
$('#websiteform').submit(function(e){
    e.preventDefault();
    var pro=$('#project').val();
    var url=$('#website_url').val();

    $.ajax({
        type: "POST",
        url: "project_save",
        data:  {project: pro, url: url},
        success: function(data)
        {
            if(data.success==false)
            {
             alert(data.error);
            }
            else{
                window.location =  "dashboard";
            }
        },
        error:function(){}
    });
});
});

以及路線和控制器功能

 Route::post('/project_save','WebsiteController@project_save');
  public function project_save()
{
    if(Request::ajax()){

        $validator = Validator::make(Request::all(), [
            'project' => 'required|max:255',
            'url' => 'required',
        ]);
        if($validator->fails()){
            return Response::json(['success'=>false,'error'=>$validator->errors()->toArray()]);
        }

        $Website = new Website;
        $Website->project_name = Request::get('project');
        $Website->website_url = Request::get('url');
        $Website->user_id = Auth::id();
        $Website->save();
        return Response::json(['success'=>true]);
    }

}

這是我的代碼,我正在獲取tokenmismatach例外。

更改您的\\App\\Http\\Middleware\\VerifyCsrfToken.php ,將此代碼添加到功能tokensMatch

if ($request->ajax()) {
        return true;
    }

嘗試這個

$_token = "{{ csrf_token() }}";
$.post( 'myurl', { param1: $param1, param2: $param2, _token: $_token })
  .done(function( data )
{
    console.log('Done!');
});

如果您不想為特定網址提供CSRF保護,則可以像這樣在App\\Http\\Middleware\\VerifyCsrfToken.php添加網址

protected $except = [
    "project_save"
];

仔細檢查以下內容:

我有一個類似的問題,這很容易解決。

將其添加到您的HTML meta標簽區域:

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

然后在您的JQuery參考下,添加以下代碼:

<script type="text/javascript">
      $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
      });
  </script>

如果您使用的是HTML表單提交(而非AJAX),則需要輸入:

{{ csrf_field() }} 

在表單標簽中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM