我正在使用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