我应该如何处理Firebase后端身份验证

时间:2016-12-09 13:51:40

标签: java firebase firebase-authentication

我使用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被成功解码,只是不知道如何得到结果。

非常感谢, 编

1 个答案:

答案 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对我来说听起来更好。