vue访问后台laravel的api跨域问题

1. 运行环境

Ubuntu

1). 当前使用的 Laravel 版本?

10

2). 当前使用的 php/php-fpm 版本?

PHP 版本:8.3

3). 当前系统

Ubuntu

4). 业务环境

开发环境

5). 相关软件版本

Nginx laravel vue

2. 问题描述?

前端项目vue页面访问后台项目laravel的api,返回419;

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 35

如果是单独部署的前端项目,在nginx中重定向接口。。。 如果是前后端一起的,把vue的文件放到public即可

1周前 评论
你和那棵树是一伙的 (楼主) 1周前
芝麻开门 (作者) 1周前
你和那棵树是一伙的 (楼主) 1周前
slowlyo
1周前 评论
你和那棵树是一伙的 (楼主) 1周前

419 是 csrf 的问题吧

1周前 评论
你和那棵树是一伙的 (楼主) 1周前

api路由是没有csrf的 是不是用了其他路由

1周前 评论
你和那棵树是一伙的 (楼主) 1周前

其中一个错误是说:由于是在跨站上下文中,且“SameSite”值为“Lax”或“Strict”,已拒绝 Cookie “laravel_session”。但是后台的‘same_site’=>'none'设置没有lax、strict

1周前 评论

把路由写在routes/api.php下而非routes/web.php下. 因为默认后者会有CSRF保护, 除非在Http/Middleware/VerifyCsrfToken.php中的protected $except = []中添加忽略.

1周前 评论
你和那棵树是一伙的 (楼主) 1周前

简单粗暴点就是nginx添加

    add_header 'Access-Control-Allow-Methods' 'GET,OPTIONS,PUT,DELETE' always;
    add_header 'Access-Control-Allow-Credentials' 'true' always;
    add_header 'Access-Control-Allow-Origin' '$http_origin' always;
    add_header 'Access-Control-Expose-Headers' 'Access-Token' always;
    add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,User-Agent,Keep-Alive,Content-Type,accept,origin,X-Requested-With, Access-Token,Token,Device,backend,City,apiVersion' always;
1周前 评论
你和那棵树是一伙的 (楼主) 1周前

这不是跨域,关闭csrf保护

1周前 评论
你和那棵树是一伙的 (楼主) 1周前

你 laravel 路由定义在 web.php 里面了吧?应该在 api.php 里面

1周前 评论
你和那棵树是一伙的 (楼主) 1周前

看看你的app/Http/Kernel.php里是不是给api也添加了 VerifyCsrfToken中间件

1周前 评论
你和那棵树是一伙的 (楼主) 1周前

kernel.php file

1周前 评论
神的孩子丶都在跳舞 1周前
你和那棵树是一伙的 (作者) (楼主) 1周前

file 你是用的SPA认证吗,用token了吗?

1周前 评论
你和那棵树是一伙的 (楼主) 1周前
神的孩子丶都在跳舞 (作者) 1周前
你和那棵树是一伙的 (楼主) 1周前

/app/Http/Kernel.php,api路由中间件里将 \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class 注释掉

1周前 评论
你和那棵树是一伙的 (楼主) 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!