使用 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);
我已尝试按照本指南创建我需要在客户端显示不同 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);