如果自定义令牌的生成是异步的,我将如何返回Firebase自定义令牌?

时间:2017-02-26 11:16:08

标签: java heroku firebase firebase-authentication spark-framework

我使用Heroku上托管的Spark Framework,我在服务器的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会返回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>。我需要从token方法返回onSuccess(),但我不能,因为它是内部类。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:2)

我在Google App Engine遇到了类似的问题。我必须在服务器端验证一个firebase令牌,但响应是从firebase发送回async的。 ( 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();

答案 1 :(得分:0)

这对我有用:

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

它以字符串形式返回自定义标记。从https://www.youtube.com/watch?v=Fi2dv6NcHWA

得到了它