Firebase 函数在本地服务时不返回预期的环境配置
Firebase Function not returning expected environment configuration when served locally
我在 Firebase 托管上托管了一个 React 应用程序,它通过调用 Firebase 函数 () 检索环境配置值。下面是函数的实现:
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,returns 我的环境配置:
https://us-central1-MY_FIREBASE_APP.cloudfunctions.net/config
调用此端点 returns 代表我的配置的预期 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 端点时那样包含在结果中?
如果您想在本地模拟函数中使用配置参数,follow the instructions here。具体来说:
If you're using custom functions configuration variables, first run the command to get your custom config (run this within the functions directory), and then run the shell:
cd functions
firebase functions:config:get > .runtimeconfig.json
functions
目录中的 .runtimeconfig.json
文件需要包含要在仿真期间使用的配置。
我在 Firebase 托管上托管了一个 React 应用程序,它通过调用 Firebase 函数 (
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,returns 我的环境配置:
https://us-central1-MY_FIREBASE_APP.cloudfunctions.net/config
调用此端点 returns 代表我的配置的预期 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 端点时那样包含在结果中?
如果您想在本地模拟函数中使用配置参数,follow the instructions here。具体来说:
If you're using custom functions configuration variables, first run the command to get your custom config (run this within the functions directory), and then run the shell:
cd functions firebase functions:config:get > .runtimeconfig.json
functions
目录中的 .runtimeconfig.json
文件需要包含要在仿真期间使用的配置。