Issue
How can I update a users claims if the map returned is an immutable map?
This is example code from Firebase Auth docs on how to update claims:
UserRecord user = FirebaseAuth.getInstance()
.getUserByEmail("[email protected]");
Map<String, Object> currentClaims = user.getCustomClaims(); //This returns an immutable map
if (Boolean.TRUE.equals(currentClaims.get("admin"))) {
currentClaims.put("level", 10); //This will throw an exception
FirebaseAuth.getInstance().setCustomUserClaims(user.getUid(), currentClaims);
}
Exception thrown: UnsupportedOperationException: null at com.google.common.collect.ImmutableMap.put(ImmutableMap.java:468)
Solution
You can simply make a copy of the map to make modifications to it using the HashMap copy constructor.
Map<String, Object> immutableCustomClaims = user.getCustomClaims();
Map<String, Object> mutableCustomClaims = new HashMap<>(immutableCustomClaims)
Answered By - Doug Stevenson
Answer Checked By - Senaida (JavaFixing Volunteer)