Set-Cookie 未在我的浏览器中设置 cookie (React + Sanctum)
Posted
技术标签:
【中文标题】Set-Cookie 未在我的浏览器中设置 cookie (React + Sanctum)【英文标题】:Set-Cookie not set cookies in my browser (React + Sanctum) 【发布时间】:2021-11-03 03:31:25 【问题描述】:我正在使用 Laravel sanctum 使用 ReactJS 进行身份验证 在 cors.php 中。我已经设置了这些值
'paths' => ['api/*', 'api/csrf-cookie','/login'],
'supports_credentials' => true,
圣所.php
'prefix'=>'api'
在 React 中,我使用带有凭证的 axios
axios.get('http://www.react.test/api/csrf-cookie').then(response =>
console.log(response);
, withCredentials: true );
使用 Postman 时,我得到了 Set-Cookie Value ,但是当我尝试使用浏览器时,它没有在我的浏览器中的 Application->cookies 选项卡下设置
Laravel 域http://www.react.test/
反应域
http://localhost:3000/
【问题讨论】:
我不确定,几个小时前我看到了一个类似的问题,但我认为它与 CORS 有关,你在 2 个不同的域之间“交谈”,所以除了 CORS 之外无法创建 cookie 明确允许该域或所有域发生这种情况。 @matiaslauriti 他需要正确使用 axios 包,之后,CORS 不是这里的问题 @cEhar 我已经回答了你的问题,如果这解决了你的问题,你可以将其标记为已回答并点赞,谢谢 @SachinAnanthakumar 哦,我知道withCredentials
,但我想了一会儿,你可以像作者那样通过它......
@matiaslauriti,你不能这样传,作者把它作为第二个参数传给then
,then
的第二个参数是错误的,参考here跨度>
【参考方案1】:
您使用的axios
包错误,withCredentials
应该作为config options
给axios
而不是then
,
把你的代码改成这个
axios.get('http://www.react.test/api/csrf-cookie', withCredentials: true ) // FIX
.then(response =>
console.log(response);
).catch((err)=>
console.log(err);
);
现在可以正常使用了
更多信息请参考axios
【讨论】:
【参考方案2】:我通过从 'http://www.react.test/api/csrf-cookie 更改域解决了这个问题 到 http://localhost:8000/api/csrf-cookie
如果不是本地主机,我认为域必须是 https。
【讨论】:
【参考方案3】:出于安全原因,cookie 仅适用于同一域或子域
【讨论】:
以上是关于Set-Cookie 未在我的浏览器中设置 cookie (React + Sanctum)的主要内容,如果未能解决你的问题,请参考以下文章
Django AWS RDS 环境变量未在 Elastic Beanstalk 中设置