如何在VerifyCsrfToken中修复TokenMismatchException.php laravel 5.2中



我正在使用Laravel 5.2,当我尝试提交表单数据时出现上述错误。

我的刀片文件是这个。

 @extends('layouts.app1')
    @section('title')
    <h3>Board of Directors</h3>
    @endsection

    @section('content')

    <script type="text/javascript" src="{{ asset('/js/tinymce/tinymce.min.js') }}"></script>
<script type="text/javascript">
  tinymce.init({
    selector : "textarea",
    plugins : ["advlist autolink lists link image charmap print preview anchor", "searchreplace visualblocks code fullscreen", "insertdatetime media table contextmenu paste"],
    toolbar : "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
  }); 
</script>
    <form action="/create" method="post">
 <div class="form-group">
      <textarea name='body'class="form-control">{{  old('body')  }}</textarea>
      </div>
      <input type="submit" name='publish' class="btn btn-success" value = "Publish"/>
      <input type="submit" name='save' class="btn btn-default" value = "Save Draft" />
    </form>
    @endsection

如何解决此问题?

每当在应用程序中定义 HTML 表单时,都应在表单中包含隐藏的 CSRF 令牌字段,以便 CSRF 保护中间件可以验证请求。您可以使用csrf_field帮助程序生成令牌字段:

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

参考

您应该在表单标签中添加一个 CSRF 字段

{!! csrf_field() !!}

尝试在config/session.php文件中设置'domain' => 'to your domain'

另一个可能的缺点,主要是如果您正在构建一个没有视图的 API 并且收到此错误,则将路由放在中间件之外。

就我而言,我想避免我所有 api 路由'api/*'出现此错误:

<?php
namespace AppHttpMiddleware;
use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'api/*',
    ];
}

您可以在app/Http/Middleware/VerifyCsrfToken.php找到该文件

您应该知道,您也可以为Web路由执行此操作,这不是常见的做法,但在某些情况下,您没有其他选择,正如Laravel Doc所说: csrf-排除-uri

最新更新