VerifyCsrfToken.php 中的 TokenMismatchException
TokenMismatchException in VerifyCsrfToken.php
我遇到错误
TokenMismatchException in VerifyCsrfToken.php line 55
当我尝试向
提交一个简单的电子邮件表单时
public function postContact(Request $request)
{
// code
}
但它永远不会到达代码部分。所以我尝试像这样比较 get 方法中的值:
public function getContact(Request $request)
{
echo $request->session()->token();
return view('contact');
}
然后我比较了存储在隐藏字段name=_token里面的值和他们return相同的值
之后回溯到抛出异常的方法:
/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php
并回应失败的测试:
public function handle($request, Closure $next)
{
echo ($this->isReading($request) ? 'true' : 'false') . ' - ' . ($this->shouldPassThrough($request)? 'true' : 'false') . ' - ' . ($this->tokensMatch($request) ? 'true' : 'false');
if ($this->isReading($request) || $this->shouldPassThrough($request) || $this->tokensMatch($request)) {
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
结果是:
false - false - false
我完全没有想法。
我总是在测试前清除 cookies,我已经将所有权限更改为 read/write 并且我在里面添加了 meta name=csrf-token带有令牌的 head 标签。
编辑:
两者都
$request->input('_token')
和
$request->header('X-CSRF-TOKEN')
内部 handle() 为空...怎么会?
在您的表单(视图)文件中。添加这两行。希望有用。
<form role="form" method="POST" action="{{ url('your action URL') }}">
<input type="hidden" name="_token" value="{{ session()->getToken() }}">
已从表单标签中删除 enctype="text/plain"
。这将向您展示:当一个框架为您提供像 Form::open() 这样的防白痴渲染器时,请使用它。
我遇到错误
TokenMismatchException in VerifyCsrfToken.php line 55
当我尝试向
提交一个简单的电子邮件表单时public function postContact(Request $request)
{
// code
}
但它永远不会到达代码部分。所以我尝试像这样比较 get 方法中的值:
public function getContact(Request $request)
{
echo $request->session()->token();
return view('contact');
}
然后我比较了存储在隐藏字段name=_token里面的值和他们return相同的值
之后回溯到抛出异常的方法:
/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php
并回应失败的测试:
public function handle($request, Closure $next)
{
echo ($this->isReading($request) ? 'true' : 'false') . ' - ' . ($this->shouldPassThrough($request)? 'true' : 'false') . ' - ' . ($this->tokensMatch($request) ? 'true' : 'false');
if ($this->isReading($request) || $this->shouldPassThrough($request) || $this->tokensMatch($request)) {
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
结果是:
false - false - false
我完全没有想法。
我总是在测试前清除 cookies,我已经将所有权限更改为 read/write 并且我在里面添加了 meta name=csrf-token带有令牌的 head 标签。
编辑:
两者都
$request->input('_token')
和
$request->header('X-CSRF-TOKEN')
内部 handle() 为空...怎么会?
在您的表单(视图)文件中。添加这两行。希望有用。
<form role="form" method="POST" action="{{ url('your action URL') }}">
<input type="hidden" name="_token" value="{{ session()->getToken() }}">
已从表单标签中删除 enctype="text/plain"
。这将向您展示:当一个框架为您提供像 Form::open() 这样的防白痴渲染器时,请使用它。