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();