我有一个 UID 1 的用户,其中自定义声明设置为,
frompos=true
Run Code Online (Sandbox Code Playgroud)
我通过以下方式从 ADMIN SDK for java 向该用户设置新的自定义声明:
Map<String,Object> claims = new HashMap<>();
claims.put("frompos",false);
FirebaseAuth.getInstance().setCustomUserClaimsAsync("1", claims).get(10000,
TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
我在服务器端打印声明以检查声明是否已设置:
UserRecord user = FirebaseAuth.getInstance().getUserAsync("1").get(10000,
TimeUnit.MILLISECONDS);
LOG.debug("user new claims " + user.getCustomClaims());
Run Code Online (Sandbox Code Playgroud)
正如预期的结果是索赔得到确定:
user new claims {frompos=false}
Run Code Online (Sandbox Code Playgroud)
现在在 android sdk 端,我已经让用户登录,因此我手动刷新 ID 令牌以按照文档所述传播声明(https://firebase.google.com/docs/auth/admin/custom-claims)
FirebaseAuth.getInstance().getCurrentUser().getIdToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
@Override
public void onComplete(@NonNull Task<GetTokenResult> task) {
if(task.isSuccessful()){
Log.d("FragmentCreate","Success refreshing token "+(FirebaseAuth.getInstance().getCurrentUser()==null));
Log.d("FragmentCreate","New token "+task.getResult().getToken());
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("FragmentCreate","Failure refreshing token "+(FirebaseAuth.getInstance().getCurrentUser()==null)+" "+e.toString()); …Run Code Online (Sandbox Code Playgroud)