Firebase Function配置域名白名单出现TypeError错误如何解决
问题原因
- 核心报错原因是
cors库的调用方式错误:cors库的正确使用逻辑是先传入配置项生成中间件函数,再将请求对象req、响应对象res、后续执行回调传入该中间件函数。你当前代码直接将配置项作为第一个参数传入cors调用,导致参数匹配错位,cors内部读取请求origin时找不到正确的req对象,抛出TypeError: Cannot read property 'origin' of undefined错误。 - 存在边界场景隐患:当请求没有携带Origin头时(比如本地Postman调试、同域直接调用),origin参数会为
undefined,如果你的白名单没有兼容这种情况,也会触发异常拦截。
修复方案
调整cors调用逻辑即可,修复后完整代码如下:
const domainsList = require('./domains'); const cors = require('cors'); const corsOptions = { origin: function (origin, callback) { // 如果你不需要允许无Origin的调试请求,可以删除 || !origin 这段判断 if (domainsList.indexOf(origin) !== -1 || !origin) { callback(null, true) } else { callback(new Error('Not allowed by CORS')) } } }; // 先传入配置生成cors中间件实例 const corsMiddleware = cors(corsOptions); exports.sendEmail = functions.https.onRequest((req, res) => { // 按正确顺序传入参数调用中间件 corsMiddleware(req, res, () => { console.log("Domain Whitelisted") // 此处补充你原本要执行的接口业务逻辑 }); });
内容的提问来源于stack exchange,提问作者Arun Kumar
相关产品推荐
相关产品推荐

