我使用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()
,但我不能,因为它是内部类。
我该怎么做才能解决这个问题?
答案 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
得到了它