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

example use of custom user claims of firebase documentation doesn't work

我已尝试按照本指南创建我需要在客户端显示不同 UI 的三个角色

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

起初我在我的 public void 运行 上初始化 firebase,主要是 .java

    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); 因为它说 The method setCustomUserClaims(String, Map) is undefined for the type FirebaseAuth

如果我将 setCustomUserClaims 更改为 setCustomClaims,因为 eclipse 提示我,我会收到以下错误 FirebaseAuth 类型的方法 setCustomClaims(String, Map) 不可见

我是第一次使用 firebase,所以我不知道为什么这不起作用

您使用的是旧版本的 SDK。 Task API 在 6.0.0 版本中被删除。在同一版本中添加了 setCustomUserClaims() 等阻止方法。如果您想继续使用旧版本,那么以下应该有效:

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