1

Я новичок в Firebase, поэтому любые идеи оцениваются. Я пишу тестовый код на стороне сервера Java. Я хватаю нескольких пользователей из базы данных и пытаюсь перенести данные на аутентифицированные пользователем узлы в Firebase. Мой код выбирает несколько пользователей из БД и разворачивает новый поток для каждого пользователя.Пределы аутентификации Firebase

Первый поток успешно соединяется и проходит аутентификацию. Последующие попытки одновременной аутентификации не выполняются с сообщением об ошибке ниже. Каждый поток имеет свой собственный экземпляр объекта ссылки Firebase. Существует ли ограничение на количество одновременных логинов, возможно, с одного и того же IP-адреса? Не удалось найти что-либо в документации.

Если я изменю код для запуска в одном потоке, а затем войдите в систему и выйдите из системы каждый пользователь один за другим, то я не получаю сообщение об ошибке.

Любое понимание очень ценится.

Message: -5 
Message: Due to another authentication attempt, this authentication attempt was aborted before it could complete. 

      Firebase ref = new Firebase("https://<instance>.firebaseio.com/"); 

      ref.authWithPassword(mEmail, mPassword, new Firebase.AuthResultHandler() { 
      @Override 
      public void onAuthenticated(AuthData authData) { 
       System.out.println("Successfully authenticated: " + mEmail); 
       user.setUID(authData.getUid()); 
       user.setCurrentUserRef(ref); 
       done.set(true); 
      } 

      @Override 
      public void onAuthenticationError(FirebaseError firebaseError) { 
       System.out.println("Error during authentication: " + mEmail); 
       System.out.println("Error during authentication: " + ref.toString()); 

       System.out.println("Message: " + firebaseError.getCode()); 
       System.out.println("Message: " + firebaseError.getDetails()); 
       System.out.println("Message: " + firebaseError.getMessage()); 

       done.set(true); 
      }}); 
      waitForCompletion(this.getClass().getName()); 
+2

Перекрестная почта: https://groups.google.com/forum/#!topic/firebase-talk/qxqPAy1PIO8 –

ответ

4

Если вы аутентичность в качестве различных пользователей из-за правила безопасности, используя server token является лучшим решением.

Соединение Firebase может быть выполнено не более одного пользователя, прошедшего проверку подлинности в любой момент времени. Однако в библиотеке Java Firebase существует недокументированное (и не официально поддерживаемое) обходное решение для создания нескольких независимых подключений. В классе, который находится в пакете com.firebase.client вы можете запустить следующий код

// important this code needs to be in the package com.firebase.client 
Config config1 = new Config(); 
Config config2 = new Config(); 
Firebase ref1 = new Firebase("https://<your-firebase>.firebaseio.com", config1); 
Firebase ref2 = new Firebase("https://<your-firebase>.firebaseio.com", config2); 
// ref1 and ref2 will now have independent connections, listeners and authentication states 

Обратите внимание, что они также будут открывать независимые подключения к серверу.

+0

Да, я использую правила безопасности на основе пользователей. https: // /users/simplelogin: xx/data Спасибо, что рассмотрю оба варианта. Я понял, что каждый объект Firebase может поддерживать только одно соединение. То, что я сделал, это создать пул потоков, и каждый поток в пуле имеет свой собственный объект без общих объектов Firebase. Я понял, что каждый объект Firebase может иметь независимое соединение. Но я не могу поддерживать потоки каждый со своим собственным подключением. Я смотрю в токены. Благодарю. – mba12

+0

Я могу подтвердить, что это работает. Тем не менее, это немного хаки. Планируется ли поддержка API более естественно? – mlohbihler

Смежные вопросы