如果返回的映射是不可变映射,我如何更新用户声明?
这是Firebase Auth文档中关于如何更新声明的示例代码:
UserRecord user = FirebaseAuth.getInstance()
.getUserByEmail("user@admin.example.com");
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);
}
Firebase文档src
引发异常:不支持OperationException:null网址:com.google.common.collect.ImutableMap.put(ImmutableMap.java:468(
Firebase Github
查看该文档,似乎可以通过指定具有新值的Map来设置声明(即,无需指定未修改的值(。
您只需制作映射的副本,就可以使用HashMap副本构造函数对其进行修改。
Map<String, Object> immutableCustomClaims = user.getCustomClaims();
Map<String, Object> mutableCustomClaims = new HashMap<>(immutableCustomClaims)