」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 是什麼原因導致 Laravel 中 POST 和 PUT 方法出現 419 狀態碼?

是什麼原因導致 Laravel 中 POST 和 PUT 方法出現 419 狀態碼?

發佈於2024-11-06
瀏覽:130

What Causes the 419 Status Code in Laravel for POST and PUT Methods?

了解Laravel API 中POST 和PUT 方法的419 狀態碼

使用Laravel 開發RESTful API 時,經常會遇到419 POST 和PUT 方法的狀態碼。此錯誤是由於 Laravel 的 CSRF 令牌驗證過程所致。

在 Laravel 5.4 及更早版本中,所有請求都啟用了 CSRF 令牌,包括 POST 和 PUT 方法。這是為了保護應用程式免受跨站點請求偽造 (CSRF) 攻擊。預設情況下,CSRF 令牌會作為表單中的隱藏欄位新增至視圖。

提交 POST 或 PUT 請求時,Laravel 期望收到有效的 CSRF 令牌以及請求資料。如果未找到有效令牌,Laravel 會產生「419 CSRF 令牌不符」異常並傳回 419 狀態代碼回應。

從 CSRF 保護中排除路由

To要解決此問題,您可以從 CSRF 令牌驗證中排除某些路由。在 Laravel 5.5 及以上版本中,您可以使用 api.php 檔案取代 web.php 進行 API 路由,且預設不會啟用 CSRF 驗證。

如果您使用 web.php 進行 API 路由,則可以透過將它們的 URI 新增至VerifyCsrfToken 中間件的 $ except 屬性來將它們排除在 CSRF 令牌驗證之外。例如:

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
    protected $except = [
        '/api/*',
    ];
}

這將從 CSRF 令牌驗證中排除以 /api 開頭的所有路由。

非 API 路由的替代解決方案

如果排除來自CSRF 保護不合適,您可以對路由組內的特定方法停用 CSRF 驗證。例如:

Route::group(['middleware' => 'web'], function () {
    Route::post('/my-route', 'MyController@store')->withoutMiddleware('verify-csrf-token');
});

這將停用對 /my-route 的 POST 請求的 CSRF 令牌驗證。

版本聲明 本文轉載於:1729254976如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3