我尝试按照本指南创建三个角色,以便在客户端显示不同的用户界面
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,所以我茫然为什么这不起作用
答案 0 :(得分:2)
您正在使用旧版本的SDK。 Task
API已在6.0.0版本中删除。在同一版本中添加了setCustomUserClaims()
之类的阻止方法。如果您想继续使用旧版本,则应执行以下操作:
ApiFuture<Void> result = FirebaseAuth.getInstance().setCustomUserClaimsAsync(uid, claims);