使用Firebase文档的自定义用户声明的示例不起作用

时间:2018-07-10 14:58:14

标签: java firebase firebase-authentication firebase-admin

我尝试按照本指南创建三个角色,以便在客户端显示不同的用户界面

https://firebase.google.com/docs/auth/admin/custom-claims

首先,我在主.java的公共void运行中初始化firebase。

    FileInputStream serviceAccount = new FileInputStream("MyRoute\\serviceAccountKey.json");

    FirebaseOptions options = new FirebaseOptions.Builder()
        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
        .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
        .build();

    FirebaseApp.initializeApp(options);

然后,按照与指南中相同的方式在用户控制器上使用自定义用户声明 UserController.java

@RequestMapping(value = "/student", method = RequestMethod.POST)
private User createStudent(@RequestBody UserDTO userDTO) {
    //Create the new User
    User user = new User();
    user.setUserType(UserType.STUDENT);
    user.setEmail(userDTO.getEmail());
    user.setFirstName(userDTO.getFirstName());
    user.setLastName(userDTO.getLastName());
    //verify the user and create custom role
    String idToken = userDTO.getIdToken();
    Task<FirebaseToken> decoded = FirebaseAuth.getInstance().verifyIdToken(idToken);
    Map<String, Object> claims = new HashMap<>();
    claims.put("student", true);
    String uid = decoded.getUid(); 
    FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);

    return userService.save(user);

有两个错误 首先,我无法像文档中所述的那样使用decoded.getUid()获取uid 因为它迫使我改用Task而不是FirebaseToken

其次,我不能使用FirebaseAuth.getInstance().setCustomUserClaims(uid, claims); 因为上面说的是类型FirebaseAuth未定义方法setCustomUserClaims(String,Map)

如果我将setCustomUserClaims更改为setCustomClaims,因为日食提示我出现以下错误 FirebaseAuth类型的方法setCustomClaims(String,Map)不可见

这是我第一次使用Firebase,所以我茫然为什么这不起作用

1 个答案:

答案 0 :(得分:2)

您正在使用旧版本的SDK。 Task API已在6.0.0版本中删除。在同一版本中添加了setCustomUserClaims()之类的阻止方法。如果您想继续使用旧版本,则应执行以下操作:

ApiFuture<Void> result = FirebaseAuth.getInstance().setCustomUserClaimsAsync(uid, claims);