1

我使用託管在Heroku星火框架和我有這個在我main:法在我的服務器如果自定義標記的生成是異步的,我將如何返回Firebase自定義標記?

post("/token", (request, response) -> "Hello World"); 

這是工作的罰款,但是,我想實際發送自定義標記,而不僅僅是「你好,世界」。

所以,從邏輯上講,我需要這樣的:

FirebaseAuth auth = FirebaseAuth.getInstance(); 
String uid = UUID.randomUUID().toString(); 
post("/token", (request, response) -> auth.createCustomToken(uid)); 

然而,createCustomToken返回Task<String>而不是String。所以,我必須做的:

auth.createCustomToken(uid).addOnSuccessListener(new OnSuccessListener<String>() { 
      @Override 
      public void onSuccess(String s) { 

      } 
     }); 

然而,在這種形式:

post("/token", (request, response) -> auth.createCustomToken(uid).addOnSuccessListener(new OnSuccessListener<String>() { 
      @Override 
      public void onSuccess(String token) { 

      } 
     })); 

我真正仍會返回是一個Task<String>。我需要從onSuccess()方法中返回token,但是我不能,因爲它是一個內部類。

我能做些什麼來解決這個問題?

回答

2

我在Google App Engine遇到類似的問題。我必須在服務器端驗證Firebase令牌,但是響應會從Firebase發回異步。 ( Verify Firebase Token at Google App Engine

你可以試試下面的代碼,而不是使用OnSuccesListener

Task<String> authTask = FirebaseAuth.getInstance().createCustomToken(uid); 

try { 
    Tasks.await(authTask); 
} catch (ExecutionException | InterruptedException e) { 
    log.severe(e.getMessage()); 
} 

String myToken = authTask.getResult();