Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 当CORS访问控制允许原点设置为(*)时设置cookie_Node.js_Api_Cookies_Browser_Cors - Fatal编程技术网

Node.js 当CORS访问控制允许原点设置为(*)时设置cookie

Node.js 当CORS访问控制允许原点设置为(*)时设置cookie,node.js,api,cookies,browser,cors,Node.js,Api,Cookies,Browser,Cors,我正在用Node.js和Express构建一个API,目的是让用户通过API调用访问它,并充当我的web应用程序(React.js)的RESTFUL后端 出于这个原因,我将CORSAccess Control Allow Origin设置为通配符(*),因为它应该能够从外部源访问 目前,API在localhost:8000上运行,web应用程序在localhost:3000上运行 现在,我想在访问我的/login端点时设置一个cookie。cookie不用于身份验证,所以我不担心CSRF 我将c

我正在用Node.js和Express构建一个API,目的是让用户通过API调用访问它,并充当我的web应用程序(React.js)的RESTFUL后端

出于这个原因,我将CORS
Access Control Allow Origin
设置为通配符(*),因为它应该能够从外部源访问

目前,API在localhost:8000上运行,web应用程序在localhost:3000上运行

现在,我想在访问我的
/login
端点时设置一个cookie。cookie不用于身份验证,所以我不担心CSRF

我将cookie设置为:

res.cookie('token', 'value', {httpOnly:true});
设置cookie在我使用Postman时没有问题,但是当试图通过浏览器使用我的webapp访问cookie时,cookie没有设置

在阅读了几篇关于堆栈溢出的文章后,我了解到在从web应用程序执行提取操作时需要设置
凭据:include

问题是,如果
Access Control Allow Origin
设置为(*),则浏览器上不允许这样做

在这些情况下,有没有办法在浏览器上设置cookie

感谢请在stackexchange上查看此答案,了解其背后的一些原因,但基本上不,您不能

如果您需要一个带有凭据的api,那么您还应该知道可以获取这些凭据的所有可能来源。将allow origin设置为本地主机和/或开发服务器,以及最终的生产地址,如下所述

我假设您正在NodeJS服务器上使用
cors

它也应该配置为接受cookies。在Express服务器的情况下,它看起来像这样

app.use(cors({
    origin:["http://localhost:3000"],
    credentials:true
}));

此外,正如您正确地说的,您可以将凭据和任何UI端调用一起发送到API。

我通过这样做解决了这个问题(我使用的是NPM的cors包):

根据报告:

原点:配置访问控制允许原点CORS标头。 可能值:

Boolean - set origin to true to reflect the request origin, as defined by req.header('Origin'), or set it to false to disable CORS.

这使得cors基本上可以接受基于请求头的任何来源,同时还允许设置Cookie。

感谢您的回复,但我的问题是我需要将我的来源设置为通配符(*),这在设置凭据时是不允许的。请参阅MDN,了解在与凭据一起使用时为什么必须指定原点而不能使用通配符
Boolean - set origin to true to reflect the request origin, as defined by req.header('Origin'), or set it to false to disable CORS.