VerifyCsrfToken.php中的TokenMismatchException

时间:2016-08-17 00:52:51

标签: php laravel csrf

我收到了错误

  

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;
}

结果是:

  

false - false - false

我完全没有想法。

我总是在测试之前清除cookie,我已经更改了所有读/写权限,并且我在头标记内添加了元 name = csrf-token 和令牌。

编辑:

两个

$request->input('_token')

$request->header('X-CSRF-TOKEN')

内部句柄()为空......怎么来的?

2 个答案:

答案 0 :(得分:1)

在您的表单(查看)文件中。添加这两行。我希望它会起作用。

<form role="form" method="POST" action="{{ url('your action URL') }}">
<input type="hidden" name="_token" value="{{ session()->getToken() }}">

答案 1 :(得分:0)

从表单标记中删除enctype="text/plain"。这将向您展示:当框架为您提供像Form :: open()这样的防止傻瓜的渲染器时,只需使用它。