【问题标题】:How would I return a Firebase custom token if the generation of the custom token is asynchronous?如果自定义令牌的生成是异步的,我将如何返回 Firebase 自定义令牌?
【发布时间】:2017-02-26 11:16:07
【问题描述】:

我正在使用托管在 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 返回 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&lt;String&gt;。我需要从onSuccess() 方法返回token,但我不能,因为它是一个内部类。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这对我有用:

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

      它返回一个字符串中的自定义标记。从https://www.youtube.com/watch?v=Fi2dv6NcHWA得到它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-16
        • 1970-01-01
        • 2021-10-10
        • 2023-04-04
        • 1970-01-01
        • 2017-04-25
        • 2019-02-11
        • 2018-08-18
        相关资源
        最近更新 更多