【问题标题】:Laravel 5 - TokenMismatchExceptionLaravel 5 - TokenMismatchException
【发布时间】:2018-01-07 13:43:35
【问题描述】:

我将我的 Web 应用程序迁移到其他服务器,之后出现此错误:

VerifyCsrfToken.php 第 46 行中的 TokenMismatchException:

这很奇怪,因为在其他形式中,everythink 都像以前一样完美,只有一页我有这个错误。 当然,我的表格中有这一行:

<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>

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    使用这个:

    {{ 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')
        }
    });
    

    【讨论】:

    • 我很确定如果你使用得当,这两个选项都对你有用。请显示您现在尝试使用的确切代码以及您遇到了什么错误?
    • @AlexeyMezenin 如果您的问题尚未解决,您可以简单地禁用 CSRF 令牌。
    • 添加到主题中,我使用dropzone js脚本
    • @Jensej 在这种情况下,您还需要设置X-CSRF-TOKEN。我已经更新了我的答案。
    • 还是这个错误。但是有些奇怪,因为只有在我的笔记本中我才有这个错误,当我从智能手机上传时,everythink 工作正常
    【解决方案2】:

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

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

    在您的 ajax 调用之前。

    【讨论】:

      【解决方案3】:

      您需要将 {{ csrf_field() }} 放在其他元素之外。所以把它想象成它自己的元素。不是你作为属性放置的东西。我总是用我喜欢的。

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

      【讨论】:

        【解决方案4】:

        打开表单后,您只需在刀片文件中使用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 令牌,因此请仅在您急于解决问题并稍后修改代码时使用它。

        【讨论】:

          猜你喜欢
          • 2016-03-06
          • 2015-05-08
          • 1970-01-01
          • 1970-01-01
          • 2015-08-10
          • 2015-09-13
          • 1970-01-01
          • 1970-01-01
          • 2015-12-19
          相关资源
          最近更新 更多