【问题标题】:FirebaseAuth is changing my current Auth UIDFirebaseAuth 正在更改我当前的身份验证 UID
【发布时间】:2019-03-03 14:01:42
【问题描述】:

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

到目前为止,登录效果很好,因为在我使用它登录后,我的 mAuth.getCurrentUser().getUid(); 得到了该 ID。

现在,问题如下,在下一个 Activity 中,我需要使用需要存储在该 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();
                }

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

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

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

所以我的问题是

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

【问题讨论】:

    标签: java android firebase firebase-realtime-database firebase-authentication


    【解决方案1】:

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

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

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

    【讨论】:

    • 嘿,谢谢!我只是用一个简单的 sharedpreferences 解决了它,存储了第一次登录的值,然后用它来创建该用户 ID 下的所有文件,如果用户只是从手机中删除数据,它将再次提示登录和 sharedprefs 将始终使用第一个登录的用户 ID
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2022-10-09
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2019-12-31
    • 2011-05-01
    相关资源
    最近更新 更多