在Firebase java中同步verifyIdToken

时间:2017-06-17 00:48:52

标签: java firebase firebase-authentication

我正在构建一个带有rest API的Java服务器,我正在使用Firebase对我的用户进行身份验证。

当用户进行重置调用时,他会使用下一个方法发送我正在验证的Firebase令牌:

FirebaseAuth.getInstance(firebaseApp).verifyIdToken(idToken)
        .addOnSuccessListener(decodedToken -> {
            // do some thing
        });

问题是我们正在谈论HTTP调用,那些不是同步的。虽然我找到了一种使这种方法同步的解决方法,但我很好奇是否有一个原生的Firebase API为我提供了开箱即用的功能。

我的工作:

final Object hack = new Object();
synchronized (hack) {
    FirebaseAuth.getInstance(firebaseApp).verifyIdToken(idToken)
            .addOnCompleteListener(decodedToken -> {
                // do some thing
                synchronized (hack){
                    hack.notifyAll();
                }
            });
    try {
        hack.wait();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:6)

你有两个选择(一个是春天的例子):

  1. 您返回DeferredResult:

    final DeferredResult<ResponseEntity<String>> deferredResult = new DeferredResult<>(5000l);
    FirebaseAuth.getInstance().verifyIdToken(firebaseAuthToken)
                .addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
                    @Override
                    public void onSuccess(FirebaseToken decodedToken) {
                        deferredResult.setResult(decodedToken);
                    }
                });
    return deferredResult;
    
  2. 您强制Firebase等待返回的令牌:

    try {
            FirebaseToken decodedToken = Tasks.await(
                    FirebaseAuth.getInstance().verifyIdToken(firebaseAuthToken));
    } catch (ExecutionException | InterruptedException e) {
            log.error("Error: {}", e.getLocalizedMessage());
    }
    

答案 1 :(得分:1)

Firebase在版本6.0.0中添加了此功能。

同步verifyToken方法:

FirebaseAuth.getInstance().verifyIdToken(firebaseAuthToken)

异步verifyToken方法:

FirebaseAuth.getInstance().verifyIdTokenAsync(firebaseAuthToken)

根据发行说明:

  • 不推荐使用“任务”界面,现在已将其删除。

  • FirebaseAuth,FirebaseMessaging和FirebaseInstanceId接口现在公开了一组阻止方法。每个操作都有阻塞和异步版本。

发行说明:https://firebase.google.com/support/release-notes/admin/java