我在Laravel 4中创建了应用程序。在localhost上一切正常,但是当我将应用程序上传到公共服务器时,我总是得到TokenMissMatchException
。经过一些调试后,我注意到每个POST请求都会创建两个令牌。
这是filter.php
Route::filter('csrf', function() {
$token = Request::ajax() ? Request::header('x-csrf-token') : Input::get('_token');
if (Session::token() != $token){
throw new Illuminate\Session\TokenMismatchException;
}
});
当我var_dump()
$token
和Session::token()
时,我会得到两个不同的值。
发布请求不是ajax。
有人可以帮我这个吗?
修改
当我删除CSRF保护时,我可以登录,但是当我刷新页面时,我会被注销,因此会话一定有问题,因为它会很快失效
答案 0 :(得分:1)
正如我所怀疑的那样,是两个请求,其中应该只有一个......
在第285行,你有
<img src="http://www.spottunes.net/" id="imgWrap" …>
- 这使得浏览器请求与再次加载文档的URL相同。它当然拒绝显示为图像,因为它再次提供相同的HTML文档 - 但我认为请求HTML文档本身就是触发表单令牌生成的原因,那就是你的问题:原始HTML文档之后是请求并生成表单的令牌,再次请求相同的网址,因此生成新的表单令牌 - 当您提交表单时,令牌“ t匹配了。
请删除img
元素(或将实际图片的网址设为src
),然后解决问题。
顺便说一下。您还有一个从http://www.spottunes.net/thumbs
到http://www.spottunes.net/thumbs/
的循环重定向,再从那里返回到http://www.spottunes.net/thumbs
,依此类推......与问题无关,但您应该查看并修复。< / p>