VerifyCsrfToken.php 中的 TokenMismatchException

Posted

技术标签:

【中文标题】VerifyCsrfToken.php 中的 TokenMismatchException【英文标题】:TokenMismatchException in VerifyCsrfToken.php 【发布时间】: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...怎么来的?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

根据您的建议,我发现问题出在表单中的属性 enctype="text/plain" 上! TYVM! 请编辑此答案,或者发布您自己的答案,并附上您解决问题的完整代码。因此遇到相同问题的下一个程序员可以快速解决问题。 编辑我自己的问题,解释我做了什么就足够了吗? 不,您最好发布完整的答案。这样就不会混淆了。 是的,我见过..不要将它添加到您的问题中。请将其发布为答案。【参考方案2】:

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

【讨论】:

以上是关于VerifyCsrfToken.php 中的 TokenMismatchException的主要内容,如果未能解决你的问题,请参考以下文章

JQuery Ajax时VerifyCsrfToken.php中的TokenMismatchException [重复]

VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:同时将 paytm 与 laravel 5.3 集成

VerifyCsrfToken.php 第 53 行中的 TokenMismatchException:(Firefox 浏览器)在 laravel 5.1 中?

Laravel 5 Auth Post Submit - VerifyCsrfToken.php 第 46 行中的 TokenMismatchException

Laravel Dingo API 和中间件问题\\VerifyCsrfToken.php

TokenMismatchException 在使用 ajax 在 laravel 上的 VerifyCsrfToken.php 第 67 行