簡體   English   中英

Laravel 5.0 TokenMismatchException與Ajax登錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM