![](/img/trans.png)
[英]Laravel 5.0 TokenMismatchException with uploadify on firefox
[英]Laravel 5.0 TokenMismatchException with ajax login
我正在debian 7服务器上使用laravel 5.0,php 5.5开发一个Web应用程序。
该网站允许用户通过登录方式(ajax登录)登录。 但...
我不断收到这个例外
TokenMismatchException in VerifyCsrfToken.php line 47
我知道有关csrf_token()的故事必须为Ajax发布形式,且格式为X-CSRF-TOKEN。 我已经尝试了一切,但仍然没有解决方案。
有趣的是,只有当您第一次访问该网站时,才会在首页或任何页面上直接访问。 当您访问会员区时,laravel会将您重定向到带有auth错误的首页,此后,您将再也不会获得tokenmismatchexception,相同的登录方式在阳光照耀下起作用。
任何建议
更新:
这是代码:
在标题中,我已经包含了csrf_code():
<meta name="csrf-token" content="{{ csrf_token() }}">
并采用以下格式(实际上是可选的,因为已经设置了X-CSRF-TOKEN)
<input type="hidden" name="_token" value="{{ csrf_token() }}">
路线:
Route::post('/login', ['as' => 'auth.login', 'uses' => 'Auth\AuthController@postSignin']);
VerifyCsrfToken.php用于调试。
public function handle($request, Closure $next)
{
if ($this->isReading($request) || $this->tokensMatch($request)) {
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
public function tokensMatch($request)
{
$token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
if (!$token && $header = $request->header('X-XSRF-TOKEN')) {
$token = $this->encrypter->decrypt($header);
}
\Clockwork::info($request->session()->token());
//\Clockwork::info(\Session::token());
\Clockwork::info($token);
//return StringUtils::equals($request->session()->token(), $token);
return StringUtils::equals(\Session::token(), $token);
}
jQuery Ajax设置:
$.ajaxSetup({
headers: {
'X-XSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
是终于解决了,原因是因为网站开头有两个空白行。 在我使用过的内容刀片中
@extends('layouts/main')...@show
用于显示布局。 @show导致两条空行,删除@show,然后空行消失了。 无论出于何种原因,这都会破坏网站上的所有cookie,而Laravel无法创建会话。
您的所有代码进展顺利..
你可以试试这个...
$.ajaxSetup({
headers: {
'X-XSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
调用jquery文件后移动此代码...
实际上,当页面即将加载时,运行此代码后会加载html dom。 您应该这样做,以便此代码在加载html dom之后运行。
我的网站上也有同样的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.