我正在使用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