创建 Firebase 登录并且不要更改 FirebaseAuth [重复]

Posted

技术标签:

【中文标题】创建 Firebase 登录并且不要更改 FirebaseAuth [重复]【英文标题】:Create Firebase Login and dont change FirebaseAuth [duplicate] 【发布时间】:2019-11-17 08:14:56 【问题描述】:

在我的 android 应用程序中,有 2 种类型的帐户(管理员和用户)。管理员可以创建用户帐户。问题是,在我从管理员创建用户帐户后,FirebaseAuth 更改为我不想要的新用户。

用例是: 管理员创建一个用户帐户。用户稍后会从他自己的设备登录。 (admin和User都属于同一个公司,为了方便我选择了这种方式)

那么有没有办法在firebase中创建一个帐户并且FirebaseAuth没有改变?

谢谢。

我尝试在创建 Uesr 帐户后重新登录管理员,但与此同时,由于安全规则,所有侦听器都被解雇 (onCancelled())。所以这种方法行不通

【问题讨论】:

"***.com/questions/54648880/…" 见***.com/questions/37517208/… 但是您为什么要管理员来创建新用户的帐户?为什么不让他们将新用户的电子邮件地址(或其他识别属性)作为白名单用户添加到数据库中?然后,当用户登录时,您会根据他们已登录并且被管理员列入白名单,授予他们访问应用数据的权限。 为了简单起见,我选择了这种方法。我的最终用户(非管理员)不精通技术并且通常是文盲,并且只需要输入一些数字,因此管理员通过设置他们的帐户来简化他们的帐户创建。您的想法提供了另一种方法。我会试试的。 如果您坚持当前的方法,链接的问题将显示如何在不退出当前用户的情况下创建新帐户。如果这对您不起作用,请展示您的尝试,以便我们尝试帮助解决问题。 成功了!但是注册完成后又遇到了另一个问题。我已经更新了问题。 【参考方案1】:

前段时间,我在为客户实施一项功能时遇到了同样的问题。

我是如何解决的。

只需将管理员 UID 存储到共享首选项中,因此,每次我在管理员中创建一个新用户时,我都会为该用户分配创建它的管理员的 UID。

另外,如果您使用其他管理员登录,只需使用登录的当前管理员 uid 覆盖 sharedprefs 中的当前 UID。

这样做您可以继续创建用户并将其存储到管理员 ID 中

如果我找到该实现的代码,我会在这里发布

编辑

找到一点可以帮助你理解的代码

例如,创建一个新用户

public void cargarPacienteFirebase(String email, String password, final String nombre, final String apellido, final Dialog mDialog) 

        SharedPreferences prefs = mContext.getSharedPreferences("ADMINUID", Context.MODE_PRIVATE);
        final String adminUID = prefs.getString("adminuid", "defaultValue");

        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();

        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();

                    SharedPreferences settings = mContext.getSharedPreferences("PACIENTEUID", Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putString("pacienteuid", pacienteID);
                    editor.apply();


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


                    Map<String, Object> userLookUp = new HashMap<>();
                    userLookUp.put(pacienteID, adminUID);
                    mDatabase.child("Test").child("userLookup").updateChildren(userLookUp);


                    Toast.makeText(mContext, "Succefully added a new user", Toast.LENGTH_SHORT).show();
                    mDialog.dismiss();

                 else 

                    pd.dismiss();

                    Toast.makeText(mContext, "E-mail or password invalid",
                            Toast.LENGTH_SHORT).show();
                

            
        ).addOnFailureListener(new OnFailureListener() 
            @Override
            public void onFailure(@NonNull Exception e) 

                Toast.makeText(mContext, "A problem has ocured: " + e.getMessage(), Toast.LENGTH_SHORT).show();

            
        );

西班牙语中有一些东西,这是我在回购中的旧实现,我相信它会对你有所帮助。

正如您在此处看到的,userLookup 是一张包含当前 UID 的用户表,因此我可以将该特定用户 ID 与该表中的用户 ID 匹配并获取所有用户信息。

【讨论】:

在您执行 mAuth.createUserWithEmailAndPassword(email, password) 之后,FirebaseAuth.getInstance() 将更改为新创建的用户,并且您的代码中的所有 firebase 挂钩都将触发并且 Permission Denied 错误将作为新的用户对管理员拥有的数据没有任何权利。这正是我的问题

以上是关于创建 Firebase 登录并且不要更改 FirebaseAuth [重复]的主要内容,如果未能解决你的问题,请参考以下文章

让用户使用 Firebase 登录(自定义 iOS 身份验证)

Flutter:Fire Base 存储图像上传的后期初始化错误

Firebase 停止监听 onAuthStateChanged

如何修复:“@angular/fire”'没有导出成员 'AngularFireModule'.ts(2305) ionic、firebase、angular

Firebase 存储上传图像不适用于亚马逊火灾(型号:Fire 7)

node_modules/@angular/fire/firebase.app.module.d.ts 中的错误?