Node.js 当CORS访问控制允许原点设置为(*)时设置cookie
我正在用Node.js和Express构建一个API,目的是让用户通过API调用访问它,并充当我的web应用程序(React.js)的RESTFUL后端 出于这个原因,我将CORSNode.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
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.