簡體   English   中英

如何解決 Laravel 不生成 CSRF 令牌

[英]How to solve Laravel not generating CSRF token

Okay, so I've been using jQuery to connect to a controller function that authenticates data and submits it via AJAX usingthis code . 直到周六我請了一天假,這一切都完美無缺。 昨天回到項目我一直遇到這個錯誤 HTTP 代碼 419

"message": "CSRF token mismatch.",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException",
"file": "C:\\workspace\\app_name\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Exceptions\\Handler.php",
"line": 387,

所以我嘗試回顯 CSRF 令牌,但它是空白的,請記住它在周五工作得很好,然后到了周日(昨天),沒有外部輸入。 它只是隨機地打我這個? 它不生成令牌的原因可能是什么?

好的,所以我只是在工作日結束之前快速將此代碼添加到我的代碼中,因此沒有時間測試因此未能注意到錯誤。

$request->session()->flush();

這行代碼負責清除會話。 不過,它在 Laravel 文檔中沒有提到的是,由於 CSRF 令牌也是會話,因此使用它基本上會使 IO 無法訪問您的數據庫,因為它會清除包括所述令牌在內的所有會話。 因此,在解決此問題之前(理想情況下,使用代碼片段清除開發人員創建的會話,同時保留內置的 Laravel 會話),避免使用這行代碼。 相反,使用它來清除單個會話:

// Forget a single key...
$request->session()->forget('name');

或者這個清除多個會話

// Forget multiple keys...
$request->session()->forget(['name', 'status']);

您還可以在此處了解有關這個漂亮框架會話的更多信息。

最后,感謝@Indra Kumar S、@John Lobo、@Manjeet 和 @Paras Rayani 抽出時間瀏覽該平台並為他人提供幫助。 肯定會這樣做。

運行以下命令:

php artisan key:generate

然后清除緩存

php artisan cache:clear 

如果您想查看令牌值是否正在更改,請嘗試以下代碼

Route::get('/token', function (Request $request) {
    $token = $request->session()->token();
    echo $token;
    $token = csrf_token();
    echo $token;

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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