我正在尝试将一些键值对添加到自定义声明中,但是找不到任何函数。您如何在Android上做到这一点?
例如,我可以通过以下方式设置“显示照片”:
FirebaseUser user = ...;
UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder()
.setPhotoUri(Uri.parse(response.body().getPhotoURI()))
.build();
user.updateProfile(profileUpdates).addOnCompleteListener(task -> { ... });
答案 0 :(得分:2)
客户端SDK的风险在于,恶意客户端也可以修改数据。我不确定现在可以在控制台中添加声明。那可能就是您要寻找的东西。来自Controlling Data Access Using Firebase Auth Custom Claims:
将各种条件添加为自定义声明似乎是一个好主意。例如,您可能想添加家庭住址,其他照片URL或个人资料描述。但这不是自定义声明的目的。地址等数据应与身份验证无关,因此应存储在数据库中。令牌不是个人资料!
并且来自Set and validate custom user claims via the Admin SDK:
自定义声明可能包含敏感数据,因此只能由Firebase Admin SDK在特权服务器环境中进行设置。
// Set admin privilege on the user corresponding to uid. Map<String, Object> claims = new HashMap<>(); claims.put("admin", true); FirebaseAuth.getInstance().setCustomUserClaims(uid, claims);
新的自定义声明将传播到用户的ID令牌, 下次发行新的。
并使用它:
// Verify the ID token first. FirebaseToken decoded = FirebaseAuth.getInstance().verifyIdToken(idToken); if (Boolean.TRUE.equals(decoded.getClaims().get("admin"))) { // Allow access to requested admin resource. }
或作为客户:
// Lookup the user associated with the specified uid. UserRecord user = FirebaseAuth.getInstance().getUser(uid); boolean claim = Boolean.parseBoolean(user.getCustomClaims().get("admin"));
您可能需要阅读以下内容:Firebase Custom Claim Java
答案 1 :(得分:0)
无法直接在客户端应用中设置自定义声明。那将被视为安全问题。自定义声明是一种灵活的安全机制,可让您授予用户对后端资源的访问权限。如果用户可以向自己授予自定义声明,那么它们将是保护资源的无效方法。
您应该使用Firebase Admin SDK在您控制的后端上分配自定义声明,并确保仅在您允许的特定情况下为用户授予这些声明-用户不应为自己分配自定义声明。