我有这样的链接:令牌:
<a href="{{ URL::to('/users/submit/' . $id->id) }}?_token={{ csrf_token() }}">Submit New</a>
生成网址:
http://example.com/users/submit/20?_token=fpf0LwHyf0JGBg0fnixjRFo1B5GgUM3RDp6dVgUU
现在在我的控制器中,我添加了条件,检查数据库中的一列,并根据此返回不同的视图。
public function wrongIdSubmit($Id) {
$submits = self::$user->where('submit_id', $Id)->first();
if (!$txid) {
App::abort(404);
}
if($submits->submit_id > 3) {
return View::make('fail',[
'submits' => $submits
]);
}
else {
return View::make('submit',[
'submits' => $submits
]);
}
}
我的问题是如何传递此标记?_token={{ csrf_token() }}
以返回View :: make以及$ submits变量?因为现在我已经犯了错误
production.ERROR:Illuminate \ Session \ TokenMismatchException
答案 0 :(得分:2)
您必须将令牌添加到表单本身。您无法在URL中传递它。将以下内容添加到表单中:
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
答案 1 :(得分:2)
Laravel提供函数,返回带有标记的直接输入隐藏字段。
csrf_field()
它将生成一个包含CSRF令牌值的HTML隐藏输入字段。
所以你可以尝试这样:
return View::make('fail',[
'submits' => $submits,
'token' => csrf_field()
]);
并且只是打印:
{!! $token !!}
或直接也喜欢:
{!! csrf_field() !!}
out put就像:
<input type="hidden" name="_token" value="*****" />
祝你好运..