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

tre*_*gan 30 php forms laravel-5

刚刚在Laravel 5中创建了一个新的应用程序,我在使用开箱即用的auth时遇到了一些麻烦......

我一直得到:VerifyCsrfToken.php第46行中的TokenMismatchException:提交登录或注册表单...

我可以在登录表单页面上看到隐藏表单字段中的令牌代码和该点的Session是相同的...

作为一个测试我也试过,因为一些其他帖子建议在app/Http/kernal.php中评论//'App\Http\Middleware\VerifyCsrfToken'以查看会发生什么.每次提交表单后,我都会收到一条消息,说明重定向到:/ auth/login或/ auth/register,具体取决于我来自哪里但没有成功.

奇怪的是,当我第一次安装框架时,这是有效的.从那时起我所做的就是运行一些迁移并设置我的一些模型和控制器,并在数据库中添加一些用户数据.

更新:

如果我:在VerifyCsrfToken.php的第55行的函数tokensMatch()中进一步研究这个:

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

var_dump($request->input('_token'));
Run Code Online (Sandbox Code Playgroud)

我可以看到两个令牌不同但在表格中使用:

var_dump(Session::all());

{{{ csrf_token() }}}
Run Code Online (Sandbox Code Playgroud)

他们是一样的.会话令牌在它到达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
Run Code Online (Sandbox Code Playgroud)

Mah*_*sar 25

我首先得到它删除线:

'照亮\基金会\ HTTP \中间件\ VerifyCsrfToken'

来自/app/Http/Resquests/Kernel.php.但是,这意味着将删除CSRF令牌检查,这意味着您的网站不会受到跨站点请求伪造的保护.

更新 根据文档,您应该通过将以下代码段添加到代码中来将CSRF令牌添加到表单中:

<input type="hidden" name="_token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个非常糟糕的主意. (4认同)
  • 但这样做安全吗? (3认同)

Jav*_* dc 10

根据文件可能是为什么:

将CSRF令牌插入表单

<input type="hidden" name="_token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到过同样的问题.我通过更改config/session.php中的以下行来解决它

'domain' => env('DOMAIN', 'yourdomainnamehere.co.uk'),
Run Code Online (Sandbox Code Playgroud)

然后在你的.env中添加以下行

DOMAIN=null
Run Code Online (Sandbox Code Playgroud)


car*_*bvz 0

我今天也遇到了同样的情况,突然我的应用程序开始向我显示该消息......

我刚刚重新启动了我的服务器,一切都恢复正常了。