首頁 >後端開發 >php教程 >是什麼原因導致 Laravel 中 POST 和 PUT 方法出現 419 狀態碼?

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

Linda Hamilton
Linda Hamilton原創
2024-10-18 20:37:03246瀏覽

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 保護中排除路由

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

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

<code class="php">namespace App\Http\Middleware;

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

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

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

非 API 路由的替代解決方案

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

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

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

以上是是什麼原因導致 Laravel 中 POST 和 PUT 方法出現 419 狀態碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn