刚刚在Laravel 5中声明了一个新应用,而在使用开箱即用的身份验证时遇到了一些麻烦...

我不断在VerifyCsrfToken.php第46行中得到:TokenMismatchException:
在提交登录或注册表格时...

我可以在登录表单页面上看到隐藏表单字段中的 token 代码,以及那时的 session 是相同的...

作为测试,我还尝试了其他一些帖子建议将其注释掉的尝试
//在app/Http/kernal.php中的“App\Http\Middleware\VerifyCsrfToken”,看看会发生什么。每次提交表单后,都会收到一条消息,提示您重定向到:/auth/login或/auth/register,具体取决于我来自哪里,但没有成功。

奇怪的是,当我第一次安装框架时,它正在工作。从那时起,我所做的一切就是运行一些迁移并设置我的一些模型和 Controller ,并用一些用户数据为数据库播种。

更新:

如果需要,请在VerifyCsrfToken.php的第55行的功能tokensMatch()中进一步研究此问题:

var_dump($request->session()->token());

var_dump($request->input('_token'));

我可以看到两个标记不同,但使用的形式是:
var_dump(Session::all());

{{{ csrf_token() }}}

他们是一样的。 session token 已经更改了一些方式,然后才能到达VerifyCsrfToken.php的第55行的功能tokensMatch()

我的堆栈跟踪如下:
in VerifyCsrfToken.php line 46
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 111
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53

最佳答案

首先,我刚开始删除该行:

'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken'

来自/app/Http/Resquests/Kernel.php。但是,这意味着CSRF token check将被删除,这意味着您的网站将不受跨站点请求伪造的保护。

更新
根据the documentation,您应该通过将以下代码段添加到代码中来将CSRF token 添加到表单中:

<input type="hidden" name="_token" value="{{ csrf_token() }}">

我在移动应用程序的后端服务中使用了第一种方法,但发现可以在请求中发送send CSRF header 。

关于php - Laravel 5 Auth Post提交-VerifyCsrfToken.php第46行中的TokenMismatchException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28875788/

10-11 05:03
查看更多