我使用Java,Google Web Toolkit和Google Cloud Datastore编写了一个基本应用程序。对于身份验证,我使用的是Firebase。当前端进行RPC调用时,它会传递用户令牌,以便后端可以验证它。
我想在后端创建一个VerifyToken类,它将接收用户令牌,调用Firebase verifyIdToken来验证它,然后返回用户uid或0如果用户令牌尚未成功验证。然后,接收RPC调用的类将使用uid获取数据并将其返回到RPC响应中。
这是当前的代码:
public class VerifyToken
{
public String verify(String token)
{
String uid = "0";
try
{
//Connect to Firebase
FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(new FileInputStream("firebaseJsonHere"))
.setDatabaseUrl("dbUrlHere")
.build();
FirebaseApp.initializeApp(options);
//Verify the token
FirebaseAuth.getInstance().verifyIdToken(token)
.addOnSuccessListener(new OnSuccessListener<FirebaseToken>() {
@Override
public void onSuccess(FirebaseToken decodedToken) {
String uid = decodedToken.getUid();
System.out.println("uid decoded = " + uid);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e)
{
System.out.println(e.getMessage());
}
});
}catch(Exception e){
System.out.println("Exception: " + e.getMessage());
}
//Return the uid or 0 if not validated
return uid;
}
}
请有人告诉我如何从SuccessListener获取结果。我可以看到uid被成功解码,只是不知道如何得到结果。
非常感谢, 编
答案 0 :(得分:0)
我想你可以做到:
public String verify(String token)
{
String uid = "0";
try
{
//Connect to Firebase
FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(new FileInputStream("firebaseJsonHere"))
.setDatabaseUrl("dbUrlHere")
.build();
FirebaseApp.initializeApp(options);
//Verify the token
FirebaseToken decodedToken = FirebaseAuth.getInstance().verifyIdToken(token).getResult();
uid = decodedToken.getUid();
}catch(Exception e){
System.out.println("Exception: " + e.getMessage());
}
//Return the uid or 0 if not validated
return uid;
}
我不是String uid = "0";
的忠实粉丝,但将其设为null
对我来说听起来更好。