Firebase/NodeJS 在代理服务器后面
Firebase/NodeJS behind proxy server
当计算机位于公司代理后面时,如何 运行 NodeJS 上的 Firebase 管理员?
npm 已经配置代理和 https-代理。 npm 命令执行正常。
然而,Firebase 尝试直接访问互联网:
Error: Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "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。我还应该更新什么才能使其正常工作?
这就是我 运行 我的 FirebaseAdmin 在公司代理后面的方式。
请安装最新的 Firebase Admin Node 版本,即 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
因为我花了一段时间才弄清楚它是如何工作的,所以任何搜索的人都可以:
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
});
当计算机位于公司代理后面时,如何 运行 NodeJS 上的 Firebase 管理员?
npm 已经配置代理和 https-代理。 npm 命令执行正常。
然而,Firebase 尝试直接访问互联网:
Error: Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "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。我还应该更新什么才能使其正常工作?
这就是我 运行 我的 FirebaseAdmin 在公司代理后面的方式。
请安装最新的 Firebase Admin Node 版本,即 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
因为我花了一段时间才弄清楚它是如何工作的,所以任何搜索的人都可以:
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
});