【问题标题】:example use of custom user claims of firebase documentation doesn't work使用 firebase 文档的自定义用户声明的示例不起作用
【发布时间】:2024-04-11 03:50:02
【问题描述】:

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

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

首先我在我的公共 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);

然后我在我的用户控制器上使用与指南中相同的自定义用户声明 用户控制器.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

如果我按照 Eclipse 的建议将 setCustomUserClaims 更改为 setCustomClaims,我会收到以下错误 FirebaseAuth 类型的方法 setCustomClaims(String, Map) 不可见

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

【问题讨论】:

    标签: java firebase firebase-authentication firebase-admin


    【解决方案1】:

    您使用的是旧版本的 SDK。 Task API 在 6.0.0 版本中被删除。在同一版本中添加了像 setCustomUserClaims() 这样的阻塞方法。如果您想继续使用旧版本,那么以下应该可以工作:

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

    【讨论】:

    • 我不知道发生了什么我以为我在 maven 上有 6.2.0 版本,但我有 5.9 版本。现在感谢 6.0 版,它可以工作了!
    最近更新 更多