刚刚在Laravel 5中创建了一个新的应用程序,我在使用开箱即用的auth时遇到了一些麻烦......
我一直得到:VerifyCsrfToken.php第46行中的TokenMismatchException: 提交登录或注册表单......
我可以在登录表单页面上看到隐藏表单字段中的令牌代码和该点的Session是相同的......
作为测试,我也尝试过其他一些帖子建议发表评论 //'App \ Http \ Middleware \ VerifyCsrfToken',在app / Http / kernal.php中看看会发生什么。每次提交表单后,我都会收到一条消息,说明重定向到:/ auth / login或/ auth / register,具体取决于我来自哪里但没有成功。
奇怪的是,当我第一次安装框架时,这是有效的。从那时起我所做的就是运行一些迁移并设置我的一些模型和控制器,并在数据库中添加一些用户数据。
更新:
在VerifyCsrfToken.php第55行的函数tokensMatch()中进一步研究,如果我:
var_dump($request->session()->token());
var_dump($request->input('_token'));
我可以看到两个令牌不同但在表格中使用:
var_dump(Session::all());
{{{ csrf_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
答案 0 :(得分:25)
我首先让它正在删除该行:
'照亮\基金会\ HTTP \中间件\ VerifyCsrfToken'
来自/app/Http/Resquests/Kernel.php。但是,这意味着CSRF token check将被删除,这意味着您的网站不会受到跨站点请求伪造的保护。
<强>更新强> 根据{{3}},您应该通过将此代码段添加到代码中来将CSRF令牌添加到表单中:
<input type="hidden" name="_token" value="{{ csrf_token() }}">
我在移动应用程序的后端服务中使用了第一种方法,但我发现我可以在请求中发送发送CSRF标头。
答案 1 :(得分:10)
根据文件可能是原因:
将CSRF令牌插入表单
<input type="hidden" name="_token" value="{{ csrf_token() }}">
答案 2 :(得分:5)
我有同样的问题。我通过更改config / session.php
中的以下行来解决它'domain' => env('DOMAIN', 'yourdomainnamehere.co.uk'),
然后在你的.env
中添加以下行DOMAIN=null
答案 3 :(得分:4)
检查您的<?php
文件。我也有这个错误,结果是由顶部的空白行(就在开始PATCH
标记之前)引起的。这样一个愚蠢的错误,希望这可以帮助某人。
答案 4 :(得分:3)
我有同样的问题,我的解决方案是
<form method="POST" action="path_to_action">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="text" name="some_name">
</form>
答案 5 :(得分:2)
如果您使用的是刀片模板,则可以在表单中使用put
{{ csrf_field() }}
而不是
<input type="hidden" name="_token" value="{{ csrf_token() }}">
它在Laravel 5.1中与我合作。
答案 6 :(得分:1)
只需退出并以唯一的方式重新登录 这是一个未知的错误,即使我有时会在我的表单中发布它,但是 所有论坛中的人都会说出来 但这并没有解决问题 只需注销并重新登录
答案 7 :(得分:1)
如果您想在VerifyCsrfToken.php中删除TokenMismatchException,请查看此链接以获取@Tariq Khan的简单解决方案: TokenMismatchException in VerifyCsrfToken.php
答案 8 :(得分:0)
解决了这个问题:
当我检查app.blade时,csrf-token在删除此内容并<meta content="9DB/rSl5JKAkQenkfGLj4o/x6+1dIDC5m52IWJxjFfo=" name="csrf-token">
添加<meta content="authenticity_token" name="csrf-param">
之后就像{{1}}一样进行了硬编码。这可能有助于一些人:)
答案 9 :(得分:0)
这是我解决此问题的方法。
Assume that your web server has already write access to session directory, in my case 'app/storage/framework/sessions/'.
Execute,
$ rm -f {your_web_app}/storage/framework/sessions/*
Reload web in your browser and try to login again.
答案 10 :(得分:0)
今天我也遇到了同样的情况,突然间我的应用程序开始向我显示这条消息......
我只是重新启动了我的服务器,一切都恢复了正常。
答案 11 :(得分:0)
有很多可能导致这个问题。 我的经验是,这可能是session.php配置文件配置错误的问题。 你有没有机会改变你的session.php配置文件? 可能是您已将域的值从null更改为您的站点名称或session.php中的任何其他内容
'domain'=&gt;空,
此文件中的错误配置可能会导致此问题。
答案 12 :(得分:0)
我遇到了同样的问题,运行 php artisan config:cache
解决了这一切。
我希望这有助于某人
答案 13 :(得分:0)
尝试php artisan route:list并检查id web中间件是否重复。 例如(网络,网络,其他)。
在Laravel 5.3默认情况下,Web中间件已激活,我已添加
Route::group(['middleware' => 'web'], function () { ALL MY ROUTE });
生成了这个TokenMismatch。
修复路线为我解决问题。
有关详细信息,请参阅Question on Laracast
答案 14 :(得分:0)
如果您想在表单中使用CSRF,则必须在表单中添加此行
<input type="hidden" name="_token" value="{{ csrf_token() }}">
如果您对使用CSRF不感兴趣,那么您必须在kernel.php文件中的下面注释
//\App\Http\Middleware\VerifyCsrfToken::class,
答案 15 :(得分:0)
可能是您的App Domain设置。
我从env文件中获取了该应用程序,该应用程序位于不同的域中。
希望这能为某人节省一些脑细胞。
答案 16 :(得分:0)
有趣的是,我最近遇到了类似的问题。我发现我的Laravel 5.1应用程序生成了两个不同的令牌。我通过生成一个新的应用程序密钥解决了这个问题[php artisan key:generate]!
答案 17 :(得分:0)
goto文件名为... VrifyCsrfToken.php。位于app / Http / Middleware /
文件夹中。
并改变以下......
命名空间App \ Http \ Middleware;
使用Illuminate \ Foundation \ Http \ Middleware \ VerifyCsrfToken作为BaseVerifier;
类VerifyCsrfToken扩展了BaseVerifier {
protected $except = [
"*" . //make * here . as is did.
];
}
答案 18 :(得分:-1)
<script>
function closedLogo()
{
$.ajax({
url: '{{route('core.closed-logo')}}',
type: 'post',
success: function (data) {
$('#return').html(data);
}
});
}
</script>