Laravel 11:如何为Webhook路由禁用CSRF验证?
Laravel 11 中 Webhook 报 HTTP 419 错误的解决办法
HTTP 419 错误是 CSRF 验证失败导致的,Laravel 11 确实移除了传统的 App\Http\Middleware\VerifyCsrfToken 单独文件,改用全局中间件配置的方式来设置 CSRF 例外,具体操作如下:
打开
bootstrap/app.php文件
这是 Laravel 11 中配置中间件的核心文件。配置 CSRF 验证例外
在应用实例的链式调用中找到(或添加)->withMiddleware()闭包,通过validateCsrfTokens()方法定义需要排除 CSRF 验证的路由:
return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->validateCsrfTokens(function (Csrf $csrf) { // 将你的 Webhook 路由添加到例外列表 $csrf->exclude([ '/webhook/your-service', // 替换为实际的 Webhook 路由路径 '/webhook/another-endpoint', // 可添加多个路由 '/webhook/*' // 也可以用通配符匹配所有子路径 ]); }); }) ->create();
- 注意事项
- 确保排除的路由路径和实际请求的路径完全一致,包括路由前缀(比如项目有
/api前缀的话要加上)。 - 如果你的 Webhook 路由是定义在
routes/api.php中的,Laravel 11 默认的 API 中间件组已经排除了 CSRF 验证,这种情况下不需要额外配置。 - 检查远程服务的请求路径、方法是否和你定义的路由完全匹配,避免因为路径错误导致的验证失败。
内容的提问来源于stack exchange,提问作者Eyad Bereh
相关产品推荐
相关产品推荐

