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,你不能这样传,作者把它作为第二个参数传给thenthen的第二个参数是错误的,参考here跨度> 【参考方案1】:

您使用的axios 包错误,withCredentials 应该作为config optionsaxios 而不是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 中设置

从相机拍照后图像未在 ImageView 中设置

导航栏 Alpha 值未在 iOS 7 中设置

Laravel 7:为啥我的会话 cookie 没有在浏览器中设置?

未在 cookie 中设置令牌

未在浏览器中创建响应标头中的 Set-Cookie - 使用 http POST