如果自定义标记的生成是异步的,我将如何返回Firebase自定义标记? [英] How would I return a Firebase custom token if the generation of the custom token is asynchronous?

查看:151
本文介绍了如果自定义标记的生成是异步的,我将如何返回Firebase自定义标记?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是Heroku上托管的Spark Framework,我在我的服务器的 main :方法中有这个

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

工作正常,但是我想要发送自定义令牌,而不是Hello World

因此,逻辑上,我需要这个:

pre $ 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){
$ b}
});

然而,在这种形式下:

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

}
}));

我真的还是返回一个任务< String> 。我需要从 onSuccess()方法返回 token ,但是我不能,因为它是一个内部类。 / p>

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

解决方案

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



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

 任务< ;字符串> authTask = FirebaseAuth.getInstance()。createCustomToken(uid); 

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

String myToken = authTask.getResult();


I'm using the Spark Framework hosted on Heroku and I have this in my main: method in my server

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

That's working fine, however, I want to actually send a custom token, and not just "Hello World".

So, logically, I would need this:

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

However, createCustomToken returns a Task<String> and not a String. So, I have to do:

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

            }
        });

However, in this form:

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

            }
        }));

All I really still returned was a Task<String>. I need to return token from the onSuccess() method, but I can't since it's an inner class.

What can I do to solve this?

解决方案

I was running into a similar problem at Google App Engine. I had to verify a firebase token at server side but the response were sent back async from firebase. ( Verify Firebase Token at Google App Engine)

You can try the following code instead of using a OnSuccesListener

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

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

String myToken = authTask.getResult();

这篇关于如果自定义标记的生成是异步的,我将如何返回Firebase自定义标记?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆