如何将Swagger与Laravel集成?集成后接口返回419错误怎么解决
问题产生原因
Laravel返回419 Page Expired错误的核心是CSRF令牌校验未通过。
Laravel默认给web中间件组下所有非GET请求开启CSRF校验,你遇到该问题的常见原因有两个:
api/login路由错误定义在了routes/web.php文件中,归属到了web中间件组,请求时未携带CSRF令牌触发校验失败- 请求头未携带
Accept: application/json,导致校验失败时Laravel返回了默认的HTML错误页面而非JSON格式报错。
解决方案
- 优先调整路由分组:将所有API接口路由定义在
routes/api.php文件中,该文件下的路由默认归属api中间件组,默认关闭CSRF校验,且会自动添加/api路由前缀,无需手动配置。 - 若必须保留路由在web中间件组,可将对应路由加入CSRF校验排除名单:
打开app/Http/Middleware/VerifyCsrfToken.php,修改$except属性:protected $except = [ 'api/login', // 其他需要跳过CSRF校验的路由 ]; - 接口请求时主动添加请求头
Accept: application/json,确保异常场景下返回JSON格式响应,便于后续问题排查。 - 若场景需要保留CSRF校验,可先获取
XSRF-TOKENcookie值,在请求时携带X-XSRF-TOKEN请求头即可通过校验。
内容的提问来源于stack exchange,提问作者Janvier
相关产品推荐
相关产品推荐

