如果自定义令牌的产生是异步的,我将如何返回firebase定制令牌



我正在使用Heroku上托管的火花框架,我在我的 main:server中的方法

中的方法
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>。我需要从onSuccess()方法返回token,但是由于它是内部类,我不能。

我该怎么办?

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

这对我有用:

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

它返回字符串中的自定义令牌。从https://www.youtube.com/watch?v=fi2dv6nchwa

最新更新