了解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中文網其他相關文章!