1

当计算机位于公司代理后面时,如何在 NodeJS 上运行 Firebase 管理员?

npm 已经配置了代理和 https-proxy。npm 命令执行正常。

然而,Firebase 尝试直接访问互联网:

错误:通过“credential”属性提供给 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。我还应该更新什么才能使其正常工作?

4

2 回答 2

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'
});

希望它可以帮助你。我为此写了一篇文章。你可以参考这里 的文章

于 2018-12-13T15:32:53.947 回答
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
});
于 2021-04-15T09:28:17.633 回答