CORS 不适用于 Firebase 云功能中的特定域
Posted
技术标签:
【中文标题】CORS 不适用于 Firebase 云功能中的特定域【英文标题】:CORS not working on specific domains in firebase cloud functions 【发布时间】:2021-03-21 14:49:28 【问题描述】:const whitelist = ["http://mywebsite.com", "http://localhost:5000"]
const corsOptions =
origin: function (origin, callback)
if (whitelist.indexOf(origin) !== -1)
callback(null, true)
else
callback(new Error('Not allowed by CORS'))
const cors = require('cors')(corsOptions);
exports.getUserProfile = functions.https.onRequest((req, res) =>
cors(req, res, () =>
try
//... here we fetch the user profile and send it in response
catch (err)
res.json(
status: "error",
message: err
)
);
);
我以这种方式使用 CORS,所以我只能让我自己的网站和 localhost:5000 向我正在使用的云功能发出请求。 localhost:5000 适合我,所以我可以在部署文件之前在本地测试东西。
-
从 reqbin.com 向我的云功能发出请求有效,为什么?它不应该不起作用吗,因为我已将域指定为来自 mywebsite.com 或 localhost:5000?
是否有任何其他方法可以在本地测试内容而不必将 localhost:5000 包含在白名单中?我正在使用
firebase serve
进行测试,但我假设这不起作用,因为来自 mywebsite.com 的请求不会被处理
【问题讨论】:
【参考方案1】:这将通过直接使用 cors 库中的源来帮助您。
const cors = require('cors')
const corsHandler = cors(
origin:["http://mywebsite.com", "http://localhost:5000"]
);
exports.getUserProfile = functions.https.onRequest((req, res) =>
corsHandler(req, res, async () =>
try
//... here we fetch the user profile and send it in response
catch (err)
res.json(
status: "error",
message: err
)
);
);
【讨论】:
这个根本不行,连我自己网站的请求都不起作用,控制台老是抛出Access to XMLHttpRequest at 'https://users.mywebsite.com/api/getUserFavorites' from origin 'https://www.mywebsite.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
错误,我还在白名单里加了https
我网站的版本.
您必须提供此列表中的所有子域和域。
我将 corsHandler
更改为 const corsHandler = cors(origin:["https://mywebsite.com","http://mywebsite.com","https://www.mywebsite.com","http://www.mywebsite.com","https://users.mywebsite.com","http://users.mywebsite.com","http://localhost:5000"]);
并且这有效,但当我从 reqbin.com 发出请求时它也有效。 :( 回到第一格...
我无法想象为什么会发生这种情况,您可以尝试在后端记录来源吗?也许它会以某种方式更改为接受的之一?
@EmilGi 我不知道这是怎么回事,但是当我再次尝试时,这才起作用。不知道发生了什么,我重新部署了整个 firebase 应用程序并且它工作了(我只部署了 firebase deploy --only functions
的功能。叹气。非常感谢您的帮助。以上是关于CORS 不适用于 Firebase 云功能中的特定域的主要内容,如果未能解决你的问题,请参考以下文章
UNNotificationServiceExtension 不适用于 Firebase 云功能
Cors - Firebase 云功能中的访问控制允许来源错误