尝试使用 Laravel 开发 RESTful API 时,您可能会在 POST 和 PUT 上遇到 419 状态代码方法。此问题源于 Laravel 的 CSRF 保护,旨在防止跨站请求伪造 (CSRF) 攻击。
Laravel 的 web.php 路由默认受 CSRF 令牌保护。 CSRF 令牌是一种确保请求来自合法来源而不是来自恶意用户的方法。当 POST 或 PUT 请求不包含正确的 CSRF 令牌时,Laravel 返回 419 状态代码。
如果您使用 web.php 路由作为 API端点,您可以通过将它们添加到VerifyCsrfToken中间件的$ except属性中将它们排除在CSRF保护之外。
<code class="php">namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier; class VerifyCsrfToken extends BaseVerifier { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'api/*', // Exclude all API routes from CSRF protection ]; }</code>
如果您是使用 Laravel 5.4 或更高版本,建议使用 api.php 文件作为 API 路由。 api.php 中定义的路由会自动排除在 CSRF 保护之外。
您可以对路由组内的特定方法禁用 CSRF 保护。
<code class="php">Route::group(['middleware' => ['api', 'without_csrf_token']], function () { Route::post('/store', 'RestController@store'); Route::put('/update/{id}', 'RestController@update'); });</code>
通过从 CSRF 保护中排除路由或针对特定方法禁用它,可以解决 419 状态码问题。请记住仅在必要时禁用 CSRF 保护,因为它是用户提交表单的重要安全措施。
以上是如何解决 Laravel 中 POST 和 PUT 方法因 CSRF 保护而出现的 419 状态码?的详细内容。更多信息请关注PHP中文网其他相关文章!