【发布时间】:2016-12-23 12:25:40
【问题描述】:
我收到了错误
VerifyCsrfToken.php 第 55 行中的 TokenMismatchException
当我尝试向
提交简单的电子邮件表单时public function postContact(Request $request)
{
// code
}
但它永远不会进入代码部分。所以我尝试像这样比较 get 方法中的值:
public function getContact(Request $request)
{
echo $request->session()->token();
return view('contact');
}
然后我比较了存储在表单内隐藏字段name=_token中的值,它们返回相同的值。
之后我回溯到抛出异常的方法:
/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;
}
结果是:
假-假-假
我完全没有想法。
我总是在测试前清除 cookie,我已将所有权限更改为读/写,并在带有令牌的 head 标记内添加了元 name=csrf-token。
编辑:
两者
$request->input('_token')
和
$request->header('X-CSRF-TOKEN')
里面的handle()都是null...怎么来的?
【问题讨论】: