我在vercel上托管了laravel后端和Next.js前端。他们的链接是这样的:
- frontend.vercel.app
- backend.vercel.app
前端请求Cookie,但无法设置。如果我悬停在图片右侧的错误图标上,它会说:“通过Set-Cookie头设置Cookie的尝试被阻止,因为其域属性对于当前主机URL无效”
Picture of request headers
这是我的后端环境:
SESSION_DOMAIN=.vercel.app
SANCTUM_STATEFUL_DOMAINS=frontend.vercel.app
SESSION_SAME_SITE=none
SESSION_SECURE_COOKIE=true
SESSION_HTTP_ONLY=true
我试过SESSION_DOMAIN=*.vercel.app
,它也不工作。
我可以使用.vercel.app
作为会话域吗?或者还有什么不对的地方?
编辑:
Blog about: Can I Set a Cookie from My Vercel Project Subdomain to Vercel.app?我认为这说明. vercel.app不能用作cookie域。在我的情况下,frontend.vercel.app也不作为cookie域工作。那么,有没有一种方法可以在我的前端和后端之间使用Set-Cookie共享Cookie,或者你建议我尝试?
1条答案
按热度按时间aamkag611#
您遇到的错误与跨域Cookie设置和Cookie中的SameSite属性有关。当前端(frontend.vercel.app)向后端(www.example.com)发出请求backend.vercel.app,您实际上是在处理跨域请求。为了让cookie在此设置中工作,您需要在Laravel后端设置一些特定的配置。
以下是如何配置Laravel后端以与Vercel上托管的Next.js前端一起工作:
**CORS配置:**请确保您的Laravel后端配置为允许来自前端域的跨域请求。您可以使用barryvdh/laravel-cors包或Laravel内置的CORS支持来设置这些规则。
在您的CORS配置中,允许来自frontend.vercel.app的请求:
您的SESSION_DOMAIN应该设置为frontend.vercel.app,因为它是您的前端的域,请求来自该域。
在开发时将SESSION_SECURE_COOKIE设置为false以允许通过HTTP的cookie,在应用程序使用HTTPS时将其设置为true以用于生产。
SESSION_SESSION_SITE可以设置为“none”以允许跨站点Cookie。
SESSION_HTTP_ONLY应设置为true,以确保只能通过HTTP访问cookie。
请确保清除Laravel应用程序缓存或重新启动服务器以应用这些更改。
Vercel配置:
确保您的Vercel部署具有正确的前端应用程序设置:
在您的Vercel设置中,将Cookie的“SameSite”属性的“安全性”设置为“允许”。
确保您的前端应用程序使用HTTPS。
测试:在测试前清除浏览器中的Cookie和缓存,以确保旧的Cookie设置不会干扰。
有了这些配置,你的Laravel后端应该能够设置和读取来自Vercel上Next.js前端的请求的cookie。确保您的更改正确部署到Laravel后端和Vercel托管的前端,以便这些配置生效。
我实现了这一点前一段时间,它的工作,我用Laravel 5.6版本