了解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 令牌驗證。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3