使用Firebase身份验证创建用户后,displayName显示为空 [英] displayName showing null after creating user with Firebase Auth

查看:139
本文介绍了使用Firebase身份验证创建用户后,displayName显示为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用Firebase身份验证添加一个用户,并且它将displayName返回为null,尽管它在注册时通过UI请求它。任何想法为什么以及如何解决?这里是我用来做到这一点的代码:

$ $ p $ startActivityForResult(AuthUI.getInstance()
.createSignInIntentBuilder()
.setProviders(Collections.singletonList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build()))
.build(),RC_SIGN_IN);

以及结果活动....

  protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
if(resultCode == RESULT_OK){
//用户登录!

//保存用户
saveUser();

startMainActivity();
return;
}

保存用户代码如下:

  private void saveUser(){
FirebaseUser fUser = FirebaseAuth.getInstance()。getCurrentUser();
final User user = new User();
if(fUser.getDisplayName()!= null){
user.setUserName(fUser.getDisplayName());
} else {
Log.e(FB_info,User has no display name);
}
user.setUserEmail(fUser.getEmail());

final DatabaseReference userRef = FirebaseDatabase.getInstance()。getReference(FirebaseRefs.getUsersRef())。child(fUser.getUid());
userRef.addListenerForSingleValueEvent(new ValueEventListener(){
@Override $ b $ public void onDataChange(DataSnapshot dataSnapshot){$ b $ if(!dataSnapshot.exists()){
userRef .updateChildren(user.toMap());
}
}

@Override
public void onCancelled(DatabaseError databaseError){

}
});






$ b

任何想法为什么显示名称返回null?因此,这似乎是Firebase本身(现在已知)的错误(不是Firebase-UI)。该错误似乎在版本 Firebase Android SDK v9.8.0 中引入。目前,其中一个解决方法是强制用户在注册系统之后注销并重新登录。另一个涉及将FirebaseUI 降级到使用旧版Firebase SDK版本的版本。
来源: https://github.com/firebase/FirebaseUI-Android/问题/ 409


I'm trying to add a user using the Firebase auth and it returns the displayName as null, even though it asks for it via the UI on sign up. Any ideas why and how to fix? Here's the code I am using to do this:

startActivityForResult( AuthUI.getInstance()
                                            .createSignInIntentBuilder()
                                            .setProviders(Collections.singletonList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build()))
                                            .build(), RC_SIGN_IN);

and in the Activity for Result....

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        // user is signed in!

        //save user
        saveUser();

        startMainActivity();
        return;
    }

save user code is as follows:

private void saveUser(){
    FirebaseUser fUser = FirebaseAuth.getInstance().getCurrentUser();
    final User user = new User();
    if (fUser.getDisplayName() != null) {
        user.setUserName(fUser.getDisplayName());
    } else {
        Log.e("FB_info", "User has no display name");
    }
    user.setUserEmail(fUser.getEmail());

    final DatabaseReference userRef =         FirebaseDatabase.getInstance().getReference(FirebaseRefs.getUsersRef()).child(fUser.getUid());
    userRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(!dataSnapshot.exists()){
                userRef.updateChildren(user.toMap());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

Any idea why the display name is returning null?

解决方案

So this appears to be (now known) bug in the Firebase itself (Not Firebase-UI). The bug appears to be introduced with version Firebase Android SDK v9.8.0. For the time being one of the workarounds is to force users to logout and re-login after they have registered with system. The other involves downgrading FirebaseUI to the version which uses older Firebase SDK version. Source: https://github.com/firebase/FirebaseUI-Android/issues/409

这篇关于使用Firebase身份验证创建用户后,displayName显示为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆