Сбой аутентификации на базе Firebase из-за прокси-сервера

#javascript #node.js #firebase #proxy #firebase-authentication

#javascript #node.js #firebase #прокси #firebase-аутентификация

Вопрос:

У меня есть экспресс-сервер, который отправляет некоторые данные в мою базу данных Firebase. Этот сервер размещен в интрасети и, следовательно, находится за прокси-сервером. Я установил переменные среды HTTP_PROXY и HTTPS_PROXY , чтобы он мог подключаться к Интернету.

Вместо сервера Express просто рассмотрим базовый фрагмент NodeJS.

Когда я пытаюсь прочитать данные, это работает (база данных Firebase настроена так, чтобы разрешить чтение любому, включая анонимных пользователей):

 const firebase = require('firebase');
function test() {
  firebase.initializeApp({
    apiKey: 'xxx',
    authDomain: 'xxx.firebaseapp.com',
    databaseURL: 'https://xxx.firebaseio.com',
    storageBucket: ''
  });
  firebase.auth().onAuthStateChanged(currentUser => {
    console.log('USER IS => ', currentUser);
  });
  firebase.database().ref('configuration').once('value', data => {
    console.log('GOT: ', data.val());
  });
}
test();
  

Вывод этого кода:

 USER IS => null  // OK, since I didn't authenticate
GOT: { 'foo': 'bar' }     // I got correct data from the database
  

Теперь я добавляю механизм аутентификации перед запросом данных:

 const firebase = require('firebase');
function test() {
  firebase.initializeApp({...});
  firebase.auth().signInAnonymously().catch(err => {
    console.log('ERROR !', err);
  });
  firebase.auth().onAuthStateChanged(currentUser => {
    console.log('USER IS => ', currentUser);
  });
  firebase.database().ref('configuration').once('value', data => {
    console.log('GOT: ', data.val());
  });
}
test();
  

Вывод таков:

 USER IS => null
ERROR ! { [Error: A network error (such as timeout, interrupted connection or unreachable host) has occurred.]
  code: 'auth/network-request-failed',
  message: 'A network error (such as timeout, interrupted connection or unreachable host) has occurred.' }
GOT: { 'foo': 'bar' }
  

То же самое происходит с аутентификацией по электронной почте / паролю ( firebase.auth().signInWithEmailAndPassword('a@example.com', 'foobar') ).

Итак, из того, что я вижу, код узла может достичь firebase (поскольку я могу получить данные), но аутентификация не может быть достигнута.

Я также провел тест, чтобы поместить этот код на HTML-страницу, используя firebase.js библиотека. В этом случае у меня нет проблем с аутентификацией (что означает, что некоторый URL-адрес аутентификации, такой как googleapis.com , не заблокированы моим прокси-сервером entreprise).

Есть ли что-то, чего мне здесь не хватает?

Спасибо.

Комментарии:

1. В node.js модуль аутентификации зависит от пакета npm xmlhttprequest для http-запросов. npmjs.com/package/xmlhttprequest Можете ли вы попробовать использовать этот модуль напрямую для выполнения http-запросов и изолировать причину этой проблемы?