【发布时间】:2016-01-08 00:19:35
【问题描述】:
我有一个在http://some.example.com/myiframes/default.aspx 上运行的页面。此页面有一个 iframe。 iframe 源/包含一个 Laravel 5.2 基础应用程序。
我的 Laravel 页面 URL “这是 iframe 的来源”是 https://laravel.example.com。
https://laravel.example.com 有一个带有提交按钮的表单。当用户点击它时,他/她会点击同一域上的另一条路由,即https://laravel.example.com/disply/survey
但每次提交表单时,我都会收到以下异常
TokenMismatchException in VerifyCsrfToken.php line 67:
为了确保我清楚,在页面 http://some.example.com/myiframes/default.aspx 我的代码看起来像这样
在我位于 https://laravel.example.com 的 laravel 应用上,这是我的表单
<form method="POST" action="https://laravel.example.com/disply/survey" accept-charset="UTF-8" class="form">
<input name="_token" type="hidden" value="Dk6SN4WzO4brbvdnBO6JZ7e1lBGjmYz8GQJ1lYFo">
<input name="survey_id" type="hidden" value="10">
<input name="call_id" type="hidden" value="667">
<input name="pools" type="hidden">
<input name="alt_id_1" type="hidden" value="250">
<input name="alt_id_2" type="hidden" value="5">
<input name="alt_id_3" type="hidden">
<input name="alt_id_4" type="hidden">
<input name="alt_id_5" type="hidden">
<input name="alt_id_6" type="hidden">
<input name="alt_id_7" type="hidden">
<input name="alt_id_8" type="hidden">
<input name="alt_id_9" type="hidden">
<input name="alt_id_10" type="hidden">
<input name="alt_string_1" type="hidden">
<input name="alt_string_2" type="hidden">
<input name="alt_string_3" type="hidden">
<input name="alt_string_4" type="hidden">
<input name="alt_string_5" type="hidden">
<input name="alt_string_6" type="hidden">
<input name="alt_string_7" type="hidden">
<input name="alt_string_8" type="hidden">
<input name="alt_string_9" type="hidden">
<input name="alt_string_10" type="hidden">
<div class="text-center">
<input class="btn btn-primary" type="submit" value="Start Survey">
</div>
</form>
该表单在 iframe 之外完美运行。只有当我在 iframe 中时才会出现问题。
我打开了位于App\Http\Middleware 的VerifyCsrfToken 类并添加了
http://some.example.com 到 $except 数组中,但没有解决问题。
protected $except = [
'http://some.example.com'
];
什么可能导致此问题? 我该如何解决这个问题?
已编辑,这是我的模板
{!! Form::open([
'url' => route('my.surveys.display'),
'class' => 'form',
'method' => 'post'
]) !!}
{!! Form::hidden('survey_id', $survey_id) !!}
{!! Form::hidden('call_id', $call_id) !!}
{!! Form::hidden('pools', $pools) !!}
{!! Form::hidden('call_type', $type) !!}
{!! Form::hidden('alt_id_1', $alt_id_1) !!}
{!! Form::hidden('alt_id_2', $alt_id_2) !!}
{!! Form::hidden('alt_id_3', $alt_id_3) !!}
{!! Form::hidden('alt_id_4', $alt_id_4) !!}
{!! Form::hidden('alt_id_5', $alt_id_5) !!}
{!! Form::hidden('alt_id_6', $alt_id_6) !!}
{!! Form::hidden('alt_id_7', $alt_id_7) !!}
{!! Form::hidden('alt_id_8', $alt_id_8) !!}
{!! Form::hidden('alt_id_9', $alt_id_9) !!}
{!! Form::hidden('alt_id_10', $alt_id_10) !!}
{!! Form::hidden('alt_string_1', $alt_string_1) !!}
{!! Form::hidden('alt_string_2', $alt_string_2) !!}
{!! Form::hidden('alt_string_3', $alt_string_3) !!}
{!! Form::hidden('alt_string_4', $alt_string_4) !!}
{!! Form::hidden('alt_string_5', $alt_string_5) !!}
{!! Form::hidden('alt_string_6', $alt_string_6) !!}
{!! Form::hidden('alt_string_7', $alt_string_7) !!}
{!! Form::hidden('alt_string_8', $alt_string_8) !!}
{!! Form::hidden('alt_string_9', $alt_string_9) !!}
{!! Form::hidden('alt_string_10', $alt_string_10) !!}
<div class="text-center">
{!! Form::submit('Start Survey', ['class' => 'btn btn-primary', 'id' => 'start_survey']) !!}
</div>
【问题讨论】:
-
尝试将
<input name="_token" type="hidden" value="Dk6SN4WzO4brbvdnBO6JZ7e1lBGjmYz8GQJ1lYFo">更改为{{ csrf_field() }}。 -
@maiorano84 我正在使用 {{ csrf_field() }}。
-
你能在 iframe 内外都转储请求,看看有什么不匹配的吗?
-
真的吗?因为我在您的代码中的任何地方都看不到它。发布模板的实际内容,而不仅仅是 HTML 输出。
-
@maiorano84 我明天离开办公室时将发布模板。我正在使用 Form 外观来执行此操作,因此它是自动的
标签: php laravel laravel-5 laravel-5.1 laravel-5.2