簡體   English   中英

Laravel 5-TokenMismatchException

[英]Laravel 5 - TokenMismatchException

我將Web應用程序遷移到其他服務器,此后出現此錯誤:

VerifyCsrfToken.php第46行中的TokenMismatchException:

這很奇怪,因為在其他形式中,每種方法都可以像以前一樣完美地工作,只有一頁出現了此錯誤。 當然,我的表格中有以下一行:

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

我嘗試清理緩存,向供應商添加權限,存儲。 清理此目錄,並一直返回錯誤。

在我的瀏覽器中,我清理了cookie和緩存,但仍然出現此錯誤。

<form action="{{url('video/upload')}}" id="qq-form">
    <input name="_token" type="hidden" value="{{ csrf_token() }}" />
</form>

用這個:

{{ csrf_token() }}

代替:

{{{ csrf_token() }}}

或者只是使用csrf_field()構建表單元素:

{{ csrf_field() }}

您已經說過您正在使用Dropzone。 在這種情況下,您還需要設置X-CSRF-TOKEN 在Blade模板中:

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

在JS中:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

如果您使用AJAX或類似的方式提交表單。 添加:

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });

在您的ajax調用之前。

您需要將{{csrf_field()}}放置在其他元素之外。 因此,將其視為自己的元素。 您沒有將其放置為屬性。 我總是像我一樣。

<form>
{{ csrf_field() }}
</form>

打開表單后,只需在刀片文件中使用如下所示的csrf_field()即可:

{{ csrf_field() }}

或者,您可以在頭部添加以下代碼:

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

如果您使用AJAX,請在ajax調用中保留以下代碼:

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});

如果仍然出現TokenMismatchException錯誤,請通過修改app / Http / Middleware / VerifyCsrfToken.php 禁用特定路由的CSRF令牌

class VerifyCsrfToken extends BaseVerifier
{

 // The URIs that should be excluded from CSRF verification.

    protected $except = [
    "/*"
    ];
}

盡管上述過程可以解決您的問題,但是不建議禁用CSRF令牌,因此僅當您急於解決問題並且以后可以修改代碼時才使用它。

暫無
暫無

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

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