首页 >后端开发 >php教程 >如何解决 Laravel 中 POST 和 PUT 方法因 CSRF 保护而出现的 419 状态码?

如何解决 Laravel 中 POST 和 PUT 方法因 CSRF 保护而出现的 419 状态码?

Linda Hamilton
Linda Hamilton原创
2024-10-18 20:35:311038浏览

How to Resolve 419 Status Code for POST and PUT Methods in Laravel Due to CSRF Protection?

Laravel API 在 POST 和 PUT 方法上返回 419 状态代码

尝试使用 Laravel 开发 RESTful API 时,您可能会在 POST 和 PUT 上遇到 419 状态代码方法。此问题源于 Laravel 的 CSRF 保护,旨在防止跨站请求伪造 (CSRF) 攻击。

根本原因

Laravel 的 web.php 路由默认受 CSRF 令牌保护。 CSRF 令牌是一种确保请求来自合法来源而不是来自恶意用户的方法。当 POST 或 PUT 请求不包含正确的 CSRF 令牌时,Laravel 返回 419 状态代码。

解决方案 1:从 CSRF 保护中排除路由

如果您使用 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>

解决方案2:使用api.php作为API路由

如果您是使用 Laravel 5.4 或更高版本,建议使用 api.php 文件作为 API 路由。 api.php 中定义的路由会自动排除在 CSRF 保护之外。

解决方案 3:对特定方法禁用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn