簡體   English   中英

Laravel AJAX 請求發布錯誤代碼:419 后 session 使用 Z0659E4DauthF281437 登錄時更改了 ID

[英]Laravel AJAX Request Post error code: 419 after session id changed when logging in using laravel auth

我有一個問題,我的 AJAX 請求返回錯誤代碼 419。AJAX 使用 POST 方法。 我已經使用csrf_token()像:

<meta name="csrf-token" content="{{ csrf_token() }}">
$.ajaxSetup({
    headers: {
        "X-CSRF-TOKEN": $("meta[name='csrf-token']").attr("content")
    }
});

AJAX 請求在注冊和注銷時有效。 但是登錄時,我的 AJAX 請求返回 419。因此,錯誤代碼 419 表示 session 已過期,所以我認為我的 CSRF 令牌有問題。

我嘗試為每個 AJAX 請求使用不同的 CSRF 令牌,但仍然沒有運氣。 Auth方法的LoginController中挖掘后,我發現在sendLoginResponse function ( AuthenticatesUsers.php > AuthenticatesUsers > sendLoginResponse ) 中重新生成了“會話標識符”。

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

我嘗試刪除這行代碼,果然 AJAX 請求有效。 但后來我在 Laravel 文檔中讀到,它將“防止惡意用戶利用 session 固定攻擊您的應用程序。”

因此,我沒有刪除它。

我嘗試了許多其他我不會讓您感到厭煩的事情,但是在尋找修復程序時,我發現了一個異常(?)。 我發現在F12菜單中,go到“Application”,再看Cookies,發現登錄時,名為“laravel_session”的cookie更改了3次,而不是注銷時更改了兩次。

Jquery version: 3.5.1 PHP version: 7.4.7 For the SQL I use XAMPP v3.2.4 (i think)

編輯:

我做了更多的事情,我發現如果重新生成 session id,瀏覽器/ajax 將不接受響應。 現在,錯誤碼 419 還帶有“CSRF 令牌不匹配”的錯誤消息,這可能表明包含 session id 信息的 cookie 存在問題。

在搜索了這個錯誤信息后,我發現 session id 是用於授權登錄信息的。 所以重新生成了session id,在授權登錄時可能會和之前的session id沖突。

雖然這一切都只是猜測。

最后,這都是一個奇怪的例子,我也很驚訝我在互聯網上的任何地方都沒有找到這樣的東西。 我不認為這是 AJAX 請求或默認 Laravel 身份驗證方法的問題。

順便說一句,這是我用來安裝登錄身份驗證的命令。

composer require laravel/ui
php artisan ui vue --auth

您必須將X-XSRF-TOKENXSRF Cookie 中的令牌一起使用,而不是CSRF 令牌

如果你使用的是 Vue。

更多信息: https://stackoverflow.com/a/64992490/9287628

暫無
暫無

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

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