1

我正在使用托管在 Heroku 上的 Spark 框架,并且main在我的服务器中的 : 方法中有这个

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

这很好,但是,我想实际发送一个自定义令牌,而不仅仅是“Hello World”。

所以,从逻辑上讲,我需要这个:

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

但是,createCustomToken返回 aTask<String>而不是 a 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>. 我需要token从该onSuccess()方法返回,但我不能,因为它是一个内部类。

我能做些什么来解决这个问题?

4

2 回答 2

2

我在 Google App Engine 遇到了类似的问题。我必须在服务器端验证一个 firebase 令牌,但响应是从 firebase 异步发回的。( 在 Google App Engine 上验证 Firebase 令牌

您可以尝试以下代码而不是使用 OnSuccesListener

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

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

String myToken = authTask.getResult();
于 2017-02-26T19:28:15.823 回答
0

This worked for me:

FirebaseAuth.getInstance().createCustomTokenAsync(UID).get()

It returns a custom token in a string. Got it from https://www.youtube.com/watch?v=Fi2dv6NcHWA

于 2018-09-29T15:56:06.663 回答