Firebase 函数在本地提供时未返回预期的环境配置
Posted
技术标签:
【中文标题】Firebase 函数在本地提供时未返回预期的环境配置【英文标题】:Firebase Function not returning expected environment configuration when served locally 【发布时间】:2018-08-14 16:35:31 【问题描述】:我有一个托管在 Firebase 托管上的 React 应用程序,它通过调用 Firebase 函数 (an impl recommended here) 来检索环境配置值。下面是函数的实现:
const functions = require('firebase-functions');
module.exports = functions.https.onRequest((req, res) =>
res.status(200).send(functions.config());
);
当我调用 Firebase CLI 时:
firebase functions:config:get
我明白了:
"auth":
"clientid": MY_CLIENT_ID,
"signoutreturnto": SOME_URL,
"responsetype": SOME_URL,
"redirecturi": SOME_OTHER_URL,
"scope": SOME_OTHER_STRING,
"domain": SOME_DOMAIN
从 Firebase CLI 调用“Firebase deploy --only functions”会生成一个 URL 端点来调用已部署的 firebase 函数 config,它会返回我的环境配置:
https://us-central1-MY_FIREBASE_APP.cloudfunctions.net/config
调用此端点返回代表我的配置的预期 JSON + 由 Firebase 附加:
"auth":
"clientid": MY_CLIENT_ID,
"signoutreturnto": SOME_URL,
"responsetype": SOME_URL,
"redirecturi": SOME_OTHER_URL,
"scope": SOME_OTHER_STRING,
"domain": SOME_DOMAIN
,
"firebase":
"databaseURL": MY_DATABASE_URL,
"storageBucket": MY_STORAGE_BUCKET,
"apiKey": MY_API_KEY,
"authDomain": MY_AUTH_DOMAIN,
"projectId": MY_PROJECT_ID,
"credential":
"credential_":
我有edited my firebase.json with re-write rules to serve my functions as API endpoints
"hosting":
"public": "build",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
"source": "**",
"destination": "/index.html"
,
"source": "/config", "function": "config"
]
但是 - 当我使用 Firebase CLI 中的以下命令在本地提供函数时:
Firebase serve --only functions,hosting
然后我为我的配置函数调用生成的本地端点:
http://localhost:5001/MY_FIREBASE_APP/us-central1/config
返回的 json 对象缺少预期的“auth”对象(见上文)。相反,返回的 JSON 是:
"firebase":
"databaseURL": MY_DATABASE_URL,
"storageBucket": MY_STORAGE_BUCKET,
"apiKey": MY_API_KEY,
"authDomain": MY_AUTH_DOMAIN,
"projectId": MY_PROJECT_ID,
"credential":
"credential_":
...
这会在本地执行时破坏我的应用程序,因为无法检索到预期的配置值。
为什么我配置的“auth”对象没有像我调用另一个 url 端点时那样包含在结果中?
【问题讨论】:
【参考方案1】:如果您想在本地模拟函数中使用配置参数,follow the instructions here。具体来说:
如果您使用自定义函数配置变量,请先运行命令以获取自定义配置(在函数目录中运行此命令),然后运行 shell:
cd functions firebase functions:config:get > .runtimeconfig.json
functions
目录中的 .runtimeconfig.json
文件需要包含要在模拟期间使用的配置。
【讨论】:
谢谢你的链接,道格。我在 SO 中为按照说明遇到的错误创建了另一个问题:***.com/questions/49139823/… @Doug Stevenson - 只是提醒一下,但文档“隐藏”了 shell 说明下的自定义配置/环境说明。就目前而言,如果您使用的是serve --only functions
方法,很容易被忽视。
@MandisaW 您可以随时使用任何页面右上角的“发送反馈”按钮将您的反馈直接发送给文档作者。
@DougStevenson 完成了 - 我想我也忽略了这一点,哈哈以上是关于Firebase 函数在本地提供时未返回预期的环境配置的主要内容,如果未能解决你的问题,请参考以下文章
Firebase:使用预留托管 URL 时未创建 Firebase 应用“[DEFAULT]”
Firebase 云函数错误:函数返回未定义、预期的 Promise 或值
Firebase 云函数 - 返回未定义、预期的 Promise 或值
if 语句在从 firebase 检索数据时未返回正确的元素