首页 > 解决方案 > 只有在 Firebase 中成功创建用户后,才能将文档添加到 Firestore?

问题描述

本质上,我正在尝试使用 Firebase 身份验证创建一个新用户,但我也想将用户的信息作为文档添加到 Firestore,但只有在成功创建新用户的情况下,否则不应到达创建文档的代码。

firebaseAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if(task.isSuccessful()) {
                        Toast.makeText(SignUpActivity.this, "Registered successfully", Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(SignUpActivity.this, "Could not register. Please try again.", Toast.LENGTH_LONG).show();

                        if (Build.VERSION.SDK_INT >= 11) {
                            SignUpActivity.this.recreate();
                        } else {
                            SignUpActivity.this.finish();
                            SignUpActivity.this.startActivity(SignUpActivity.this.getIntent());
                        }
                    }
                }
            });

    Map<String, Object> user = new HashMap<>();
    user.put("email", email);
    user.put("fName", fName);
    user.put("lName", lName);

    if(studentRadioButton.isChecked()) {
        user.put("studentNum", email.substring(1, 9));
    }

    firebaseFirestore.collection("users").document(firebaseAuth.getUid()).set(user);

我尝试过的一种方法(如下所示)是重新创建当前活动,但它只是回到它开始的地方并最终移动到它创建文档的代码上。对于我尝试过的所有其他方法,就好像除了 Toast 弹出窗口之外,我无法将任何内容放入 onCompleteListener 中的 onComplete 方法中。请帮忙!

标签: androidfirebasegoogle-cloud-firestorefirebase-authentication

解决方案


正如 aryan 评论的那样:为确保仅在 Firebase 身份验证中创建用户时创建文档,请将代码移动到if

firebaseAuth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if(task.isSuccessful()) {
                Toast.makeText(SignUpActivity.this, "Registered successfully", Toast.LENGTH_LONG).show();

                Map<String, Object> user = new HashMap<>();
                user.put("email", email);
                user.put("fName", fName);
                user.put("lName", lName);

                if(studentRadioButton.isChecked()) {
                    user.put("studentNum", email.substring(1, 9));
                }

                firebaseFirestore.collection("users").document(firebaseAuth.getUid()).set(user);

            } else {
                Toast.makeText(SignUpActivity.this, "Could not register. Please try again.", Toast.LENGTH_LONG).show();

                if (Build.VERSION.SDK_INT >= 11) {
                    SignUpActivity.this.recreate();
                } else {
                    SignUpActivity.this.finish();
                    SignUpActivity.this.startActivity(SignUpActivity.this.getIntent());
                }
            }
        }
    });

推荐阅读