首页 > 解决方案 > FirebaseAuth 正在更改我当前的身份验证 UID

问题描述

我正在制作一个应用程序来注册我从 Firebase 身份验证面板手动创建的用户。使用该用户登录后,我的身份验证等于我在 Firebase 上的身份验证

在此处输入图像描述

到目前为止,登录效果很好,因为在我登录后它给了我的mAuth.getCurrentUser().getUid();那个 id。

现在,问题如下,在下一个活动中,我需要使用需要存储在该 UID 中的对话框来创建用户,现在我设法以这种方式做到了。

 final UserModel userModel = new UserModel();
        userModel.setNombre(nombre);
        userModel.setApellido(apellido);
        final ProgressDialog pd = new ProgressDialog(mContext);
        pd.setMessage("Estamos cargando su paciente...");
        pd.setCancelable(false);
        pd.show();
        final String adminUID = mAuth.getCurrentUser().getUid();
        mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    pd.dismiss();
                    final String pacienteID = task.getResult().getUser().getUid();
                    mDatabase.child("Bord").child(adminUID).child("pacientes").setValue(pacienteID).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {

                            Map<String,Object> mapUsuario = new HashMap<>();
                            mapUsuario.put("nombre",userModel.getNombre());
                            mapUsuario.put("apellido",userModel.getApellido());
                            mapUsuario.put("pregunta",1);
                            mDatabase.child("Bord").child(adminUID).child("pacientes").child(pacienteID).updateChildren(mapUsuario);
                        }
                    });

                    Toast.makeText(mContext, "Su paciente se cargo con exito", Toast.LENGTH_SHORT).show();
                    mDialog.dismiss();

                } else {

                    pd.dismiss();
                    Log.i("Tags", "Tags signInWithEmail:failure" + task.getException());
                    Toast.makeText(mContext, "Su contraseña o email es incorrecta.",
                            Toast.LENGTH_SHORT).show();
                }

final String adminUID = mAuth.getCurrentUser().getUid();方法之前的这一行createUserWithEmailAndPassword(从 FirebaseAuth 创建一个新用户)向我提供了我使用我在 Firebase 控制台中创建的用户的用户 ID 进行的第一次登录的 mAuth,但是在createUserWithEmailAndPassword我可以将该用户一次存储在我的节点。

在此处输入图像描述

这就是它应该如何工作的方式。但问题在于我第二次按下该对话框以在我的节点内添加另一个 paciente。

在此处输入图像描述

createUserWithEmailAndPassword在我创建第一个用户之后,似乎让我登录到了 firebase,然后,当我尝试添加一个新用户时,它使用了最后一个用户的 UID。

所以我的问题是

有什么方法可以防止createUserWithEmailAndPassword自动登录或更改我第一次登录的当前用户 ID?

标签: javaandroidfirebasefirebase-realtime-databasefirebase-authentication

解决方案


这似乎是设计使然。但我看到了两种可能的解决方案:

  1. 创建第二个 Firebase 客户端实例,连接到同一个项目,并使用它来创建新用户。可以在此处找到有关如何执行此操作的详细信息:https ://firebase.google.com/docs/configure/

或者

  1. 创建一个接收电子邮件和密码的云函数,并使用管理 SDK 创建用户,并使用 HttpsCallable 从您的应用程序调用它。您还可以在那里获取当前用户,并且仅当用户是管理员时才允许该请求。更多详情:https ://firebase.google.com/docs/functions/callable

推荐阅读