#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-запросов и изолировать причину этой проблемы?