2017-02-05 7 views
0

Я пытаюсь проверить ID токена пользователя. Всякий раз, когда я называю verifyIdToken функция является брошена следующая ошибка:Firebase Java admin SDK error

java.lang.IllegalArgumentException: ProjectID должен быть установлен

Вот код сервлета:

public class GeneratorInfoServlet extends HttpServlet { 
    FirebaseApp app = null; 

    @Override 
    public void init(ServletConfig config) { 
     InputStream serviceAccount = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream("/WEB-INF/service_key.json"); 

     FirebaseOptions options = new FirebaseOptions.Builder() 
       .setCredential(FirebaseCredentials.fromCertificate(serviceAccount)) 
       .setDatabaseUrl("https://project-id.firebaseio.com/") 
       .build(); 

     this.app = FirebaseApp.initializeApp(options); 

    } 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     PrintWriter out = resp.getWriter(); 
     StringBuffer tokenBuffer = new StringBuffer(); 
     String line; 

     try { 
      BufferedReader reader = req.getReader(); 
      while ((line = reader.readLine()) != null) 
       tokenBuffer.append(line); 

      this.verifyToken(tokenBuffer.toString()); 
      out.print("{'success': false}"); 
     } catch (Exception e) { 
      System.err.print(e); 
      out.print("{'success': true}"); 
     } 
    } 

    private void verifyToken(String idToken) { 
     System.out.println(app); 
     FirebaseAuth.getInstance(this.app).verifyIdToken(idToken) 
       .addOnSuccessListener(decodedToken -> { 
        String uid = decodedToken.getUid(); 
        System.out.println(uid); 
       }).addOnFailureListener(e -> System.out.println(e)); 
    } 
} 

Я проходил документацию, и я не нашел способ установить идентификатор проекта напрямую. Однако я думаю, что это не обязательно, в первую очередь, поскольку оно уже написано в URL-адресе service_key и database.

Спасибо!

Edit:

функция

Regular Java SDK (не админ) имеет setApplicationId ("PROJECT_ID"), построенный в FirebaseOptions строитель. Однако нет такой опции в Admin SDK

ответ

1

Я инициализацией мой Firebase App немного по-другому, видеть мой код

InputStream in = Thread.currentThread().getContextClassLoader() 
       .getResourceAsStream("/WEB-INF/service_key.json"); 

FirebaseOptions options = new FirebaseOptions.Builder() 
        .setServiceAccount(in) 
        .setDatabaseUrl(".....") 
        .build(); 

Это работает для меня Администратор SDK версии 4.0.4

+1

I 'мы использовали новейший Admin SDK 4.1.1, в котором метод setServiceAccont устарел. Я попытался перейти к вашей версии, после чего я получаю исключение NullPointerException. Оказалось, что InputStream имеет значение null, а новая версия SDK не проверяет нулевое значение и бросает ошибочную ошибку «projectId должна быть установлена». Большое спасибо, ваш комментарий привлек меня к сути вопроса –

+1

Гах, извините! Мы получим это обновление в следующем выпуске, поэтому мы сделаем лучшую ошибку для этого случая. – jwngr

+0

Нет проблем. благодаря –

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

  • Нет связанных вопросов^_^