![](/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.