Firebase Locally use config variable doesn't work - Error: Missing Plaid "Secret"
Firebase Locally use config variable doesn't work - Error: Missing Plaid "Secret"
我在本地测试 firebase 功能时遇到问题。
我有一些要保护的关键 api 键。所以为此我使用 functions.config()
.
当使用 firebase emulators:start
或 firebase emulators:start --only functions
在本地启动您的函数服务器时,当使用 functions.config().plaid.secret
.[=23 时 secret
值为空时,它向我显示错误=]
我使用 firebase functions:config:get > .runtimeconfig.json
将我的配置带到本地。我 运行 它在我的 functions
文件夹中。
.runtimeconfig.json
文件如下所示:
{
"plaid": {
"secret": "blabla",
"clientid": "blabla"
}
}
我的 index.js
如下所示:
// Using Express
const express = require('express');
const app = express();
app.use(express.json());
// Cloud Functions
const functions = require("firebase-functions");
// Cloud Firestore
const admin = require("firebase-admin");
admin.initializeApp();
const database = admin.firestore();
// Plaid
const plaid = require("plaid");
const plaidClient = new plaid.Client({
clientID: functions.config().plaid.clientid,
secret: functions.config().plaid.secret,
env: plaid.environments.development,
});
// Firestore Refs
const usersRef = database.collection("users");
// Token Management
// Create Token
app.post('/get_link_token', async (request, response) => {
try {
const clientUserId = "SomeUserID";
// Create the link_token with all of your configurations
const tokenResponse = await plaidClient.createLinkToken({
user: {
client_user_id: clientUserId,
},
client_name: 'someproject',
products: ['auth', 'transactions'],
country_codes: ['US'],
language: 'en',
});
response.on({ link_token: tokenResponse.link_token });
} catch (e) {
// Display error on client
return response.send({ error: e.message });
}
});
我的错误如下:
⚠ functions: The Cloud Firestore emulator is not running, so calls to Firestore will affect production.
⚠ Error: Missing Plaid "secret"
at new Client (/Users/somedude/Work/someproject/functions/node_modules/plaid/lib/PlaidClient.js:17:11)
at Object.<anonymous> (/Users/somedude/Work/someproject/functions/index.js:18:21)
at Module._compile (node:internal/modules/cjs/loader:1083:30)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1112:10)
at Module.load (node:internal/modules/cjs/loader:948:32)
at Function.Module._load (node:internal/modules/cjs/loader:789:14)
at Module.require (node:internal/modules/cjs/loader:972:19)
at require (node:internal/modules/cjs/helpers:88:18)
at /usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:699:33
at Generator.next (<anonymous>)
at fulfilled (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:5:58)
at processTicksAndRejections (node:internal/process/task_queues:93:5)
⚠ We were unable to load your functions code. (see above)
你知道我做错了什么吗?
提前致谢!
编辑:你在这里有更多的上下文 https://github.com/plaid/plaid-node/issues/345
我这边还没解决。
好的,解决方案就是实际使用文档中所说的内容。
至此:
const plaidClient = new plaid.Client({
clientID: functions.config().plaid.clientid,
secret: functions.config().plaid.secret,
env: plaid.environments.development,
});
并确保您使用的至少是 7.0.0 版本。
由于某些原因,使用npm添加包时,安装的是2.1.0,这是绝对不正确的。
我在本地测试 firebase 功能时遇到问题。
我有一些要保护的关键 api 键。所以为此我使用 functions.config()
.
当使用 firebase emulators:start
或 firebase emulators:start --only functions
在本地启动您的函数服务器时,当使用 functions.config().plaid.secret
.[=23 时 secret
值为空时,它向我显示错误=]
我使用 firebase functions:config:get > .runtimeconfig.json
将我的配置带到本地。我 运行 它在我的 functions
文件夹中。
.runtimeconfig.json
文件如下所示:
{
"plaid": {
"secret": "blabla",
"clientid": "blabla"
}
}
我的 index.js
如下所示:
// Using Express
const express = require('express');
const app = express();
app.use(express.json());
// Cloud Functions
const functions = require("firebase-functions");
// Cloud Firestore
const admin = require("firebase-admin");
admin.initializeApp();
const database = admin.firestore();
// Plaid
const plaid = require("plaid");
const plaidClient = new plaid.Client({
clientID: functions.config().plaid.clientid,
secret: functions.config().plaid.secret,
env: plaid.environments.development,
});
// Firestore Refs
const usersRef = database.collection("users");
// Token Management
// Create Token
app.post('/get_link_token', async (request, response) => {
try {
const clientUserId = "SomeUserID";
// Create the link_token with all of your configurations
const tokenResponse = await plaidClient.createLinkToken({
user: {
client_user_id: clientUserId,
},
client_name: 'someproject',
products: ['auth', 'transactions'],
country_codes: ['US'],
language: 'en',
});
response.on({ link_token: tokenResponse.link_token });
} catch (e) {
// Display error on client
return response.send({ error: e.message });
}
});
我的错误如下:
⚠ functions: The Cloud Firestore emulator is not running, so calls to Firestore will affect production.
⚠ Error: Missing Plaid "secret"
at new Client (/Users/somedude/Work/someproject/functions/node_modules/plaid/lib/PlaidClient.js:17:11)
at Object.<anonymous> (/Users/somedude/Work/someproject/functions/index.js:18:21)
at Module._compile (node:internal/modules/cjs/loader:1083:30)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1112:10)
at Module.load (node:internal/modules/cjs/loader:948:32)
at Function.Module._load (node:internal/modules/cjs/loader:789:14)
at Module.require (node:internal/modules/cjs/loader:972:19)
at require (node:internal/modules/cjs/helpers:88:18)
at /usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:699:33
at Generator.next (<anonymous>)
at fulfilled (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:5:58)
at processTicksAndRejections (node:internal/process/task_queues:93:5)
⚠ We were unable to load your functions code. (see above)
你知道我做错了什么吗?
提前致谢!
编辑:你在这里有更多的上下文 https://github.com/plaid/plaid-node/issues/345 我这边还没解决。
好的,解决方案就是实际使用文档中所说的内容。 至此:
const plaidClient = new plaid.Client({
clientID: functions.config().plaid.clientid,
secret: functions.config().plaid.secret,
env: plaid.environments.development,
});
并确保您使用的至少是 7.0.0 版本。 由于某些原因,使用npm添加包时,安装的是2.1.0,这是绝对不正确的。