相关疑难解决方法(0)

Firebase 身份验证自定义声明不会传播到客户端

我有一个 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)

android firebase firebase-authentication

5
推荐指数
1
解决办法
4286
查看次数