首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >firebase用户的UID在auth和db 中不一样

firebase用户的UID在auth和db 中不一样
EN

Stack Overflow用户
提问于 2019-06-11 05:05:54
回答 2查看 0关注 0票数 0

我正在制作一个APP,您必须登录才能继续 - 如果您没有注册用户,则可以创建一个新帐户。但是,当我创建一个新用户(并且它成功)时,我有一些关于我想要存储的用户的其他数据,用户UID作为唯一节点。

我的问题是,当我这样做时,用户auth UID与保存在DB中的用户不同。请参阅下面的代码:

代码语言:javascript
复制
    private EditText editTextEmail, editTextPassword, editTextName, editTextAge;
    private Button btnSignup;

    private FirebaseAuth firebaseAuth;                                                         
    private DatabaseReference databaseReference;                                                


    @Override
    protected void  onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);

        firebaseAuth = FirebaseAuth.getInstance();

        btnSignup = findViewById(R.id.btn_signUp2);
        editTextEmail = findViewById(R.id.editText_emailSignup);
        editTextPassword = findViewById(R.id.editText_passwordSignup);
        editTextName = findViewById(R.id.editText_nameSignup);
        editTextAge = findViewById(R.id.editText_ageSignup);

        btnSignup.setOnClickListener(this);

    }

    public void signUp(){                                                                       
        final String email = editTextEmail.getText().toString().trim();                       
        final String password = editTextPassword.getText().toString().trim();
        String name = editTextName.getText().toString().trim();
        String age = editTextAge.getText().toString().trim();

        if(TextUtils.isEmpty(email)){                                                           
            Toast.makeText(this, "Please enter an email", Toast.LENGTH_LONG).show();
            return;                                                                            
        }
        if(TextUtils.isEmpty(password)){
            Toast.makeText(this,"Please enter a password", Toast.LENGTH_LONG).show();
            return;
        }
        if(TextUtils.isEmpty(name)){
            Toast.makeText(this,"Please enter your name", Toast.LENGTH_LONG).show();
            return;
        }
        if(TextUtils.isEmpty(age)){
            Toast.makeText(this,"Please enter your age", Toast.LENGTH_LONG).show();
            return;
        }

        firebaseAuth.createUserWithEmailAndPassword(email, password)                            
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if(task.isSuccessful()){                                                
                            firebaseAuth.signInWithEmailAndPassword(email, password);
                            Toast.makeText(getApplicationContext(), "Register completed successfully", Toast.LENGTH_SHORT).show(); 
                        }else{
                            Toast.makeText(getApplicationContext(), "Error, please try again", Toast.LENGTH_SHORT).show();
                            return;                                                             
                        }
                    }
                });

        FirebaseUser fbUser = firebaseAuth.getCurrentUser();
        User user = new User(email, password, name, Integer.parseInt(age));                     
        databaseReference = FirebaseDatabase.getInstance().getReference("users");       
        databaseReference.child(fbUser.getUid().trim()).setValue(user);                         

        finish();                                                                               
        startActivity(new Intent(this, LoginActivity.class));

    }


    @Override
    public void onClick(View view) {
        if (view == btnSignup){
            signUp();
        }
    }

在此输入图像描述
在此输入图像描述

在此输入图像描述
在此输入图像描述

正如你所看到的那样,Uid不匹配。我究竟做错了什么?

我读到Firebase在创建用户时实际上并没有登录用户,所以如果创建成功,我尝试登录用户。它没有改变任何东西。

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 13:50:40

首先评论一下:

  1. 当您创建通过Android SDK的火力地堡一个用户,该用户在已签署的,所以没有必要调用signInWithEmailAndPasswordonComplete处理程序。
  2. 您现在正在注册新用户之前更新数据库,因为这是异步发生的。要在写入数据库之前确保注册完成,请将数据库代码移动到onComplete(甚至更好onSuccess)处理程序中。

所以类似于:

代码语言:javascript
复制
firebaseAuth
    .createUserWithEmailAndPassword(email, password)                            
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if(task.isSuccessful()){                                                
                Toast.makeText(getApplicationContext(), "Register completed successfully", Toast.LENGTH_SHORT).show(); 

                FirebaseUser fbUser = firebaseAuth.getCurrentUser();
                User user = new User(email, password, name, Integer.parseInt(age));                     
                databaseReference = FirebaseDatabase.getInstance().getReference("users");       
                databaseReference.child(fbUser.getUid()).setValue(user);  
            }else{
                Toast.makeText(getApplicationContext(), "Error, please try again", Toast.LENGTH_SHORT).show();
                return;                                                             
            }
        }
    });
票数 0
EN

Stack Overflow用户

发布于 2019-06-11 14:30:02

我解决了这个问题。我把它写成了我的第一个参数oncompletelistener

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档