当计算机位于公司代理后面时,如何在NodeJS上运行Firebase管理员?
npm已经配置了代理和https代理。 npm命令执行正常。
Firebase会尝试直接访问互联网:
错误:通过"凭证"提供给initializeApp()的凭证实施财产无法获取有效的Google OAuth2访问令牌,并显示以下错误:" connect ETIMEDOUT 216.58.203.45:443"。
我尝试在firebase-admin下更新faye-websocket \ lib \ faye \ websocket \ client.js以阅读
var Client = function(_url, protocols, options) {
options = options || {};
options.proxy = {
origin: 'http://proxy.server.local:8080'
};
我尝试了几种变体,但nodejs仍在尝试直接访问216.58.203.45:443。我还应该更新什么以使其有效?
答案 0 :(得分:2)
这是我在公司代理后面运行FirebaseAdmin的方式。
请安装最新的Firebase管理节点版本,即v6.4.0及更高版本。此外,您还需要安装tunnel2库。
npm install firebase-admin@6.4.0
npm install tunnel2
var admin = require('firebase-admin');
var serviceAccount = require('path/to/serviceAccountKey.json');
const tunnel = require('tunnel2')
// Create your Proxy Agent
// Please choose your tunneling method accordingly, my case
// is httpsoverHttp, yours might be httpsoverHttps
const proxyAgent = tunnel.httpsOverHttp({
proxy: {
host: 'yourProxyHost',
port: yourProxyPort,
proxyAuth: 'user:password' // Optional, required only if your proxy require authentication
}
});
admin.initializeApp({
credential: admin.credential.cert(serviceAccount, proxyAgent),
databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});
希望它对您有帮助。我为此写了一篇文章。你可以在那里参考 the article here
答案 1 :(得分:0)
因为我花了一段时间才弄清楚它是如何工作的,所以任何人都可以搜索:
const proxyAgent = tunnel.httpsOverHttp({
proxy: {
host: 'YOUR_PROXY_HOST',
port: YOUR_PROXY_PORT,
proxyAuth: 'user:password', // Optional, required only if your proxy require authentication
},
});
admin.initializeApp({
credential: admin.credential.cert(serviceAccount, proxyAgent),
databaseURL: 'https://<DATABASE_NAME>.firebaseio.com',
httpAgent: proxyAgent, //this is what I was missing
});