当前位置: 首页 > 知识库问答 >
问题:

如何仅允许当前用户在Firebase中为新用户创建帐户

江航
2023-03-14

我正在尝试构建一个只有当前用户才能为新用户创建帐户的应用程序。我有两种用户医生和病人。只有医生才能为患者创建账户。到目前为止,Iv创建了一个Firebase数据库,它似乎正在工作,但现在已经停止。患者目前正在接受身份验证,但他们的信息没有被添加到数据库中。我认为问题在于在当前用户登录时尝试创建新用户。是否允许用户创建一个新用户,而无需作为新创建的用户登录?

此代码创建患者帐户并将其添加到Firebase

 public class PatientRegister extends AppCompatActivity {
 EditText FirstName,LastName,PatientEmail,PatientPassword;
 Button CreateAccount;
 FirebaseAuth mAuth2;
 AuthStateListener firebaseAuthStateListener;

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

    FirstName = findViewById(R.id.fName);
    LastName = findViewById(R.id.lName);
    PatientEmail = findViewById(R.id.patientEmail);
    PatientPassword = findViewById(R.id.patientPassword);
    CreateAccount = findViewById(R.id.addPatient);
    mAuth2 = FirebaseAuth.getInstance();

     firebaseAuthStateListener = new FirebaseAuth.AuthStateListener() {
         @Override
         public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
             final FirebaseUser patientAcc = FirebaseAuth.getInstance().getCurrentUser();
             if (patientAcc != null){

             } } };
    CreateAccount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String fname = FirstName.getText().toString();
            final String lname = LastName.getText().toString();
            final String patientemail = PatientEmail.getText().toString();
            final String patientpassword = PatientPassword.getText().toString();

            startActivity(new Intent(getApplicationContext(),PatientAccount.class));

            mAuth2.createUserWithEmailAndPassword(patientemail,patientpassword).addOnCompleteListener(PatientRegister.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (!task.isSuccessful()) {
                        Toast.makeText(PatientRegister.this, "sign up error", Toast.LENGTH_SHORT).show();
                    } else {
                        String patientId = mAuth2.getCurrentUser().getUid();
                        DatabaseReference PatientDataBase = FirebaseDatabase.getInstance().getReference().child("Patient").child(patientId);
                        Map<String, Object> patient = new HashMap<>();
                        patient.put("Last Name", lname);
                        patient.put("First Name", fname);
                        patient.put("Patient Email", patientemail);
                        PatientDataBase.updateChildren(patient);
                    } }}); } }); }
 @Override
protected void onStart() {
    super.onStart();
    mAuth2.addAuthStateListener(firebaseAuthStateListener);
}

@Override
protected void onStop() {
    super.onStop();
    mAuth2.removeAuthStateListener(firebaseAuthStateListener);
  }}

共有1个答案

鄢禄
2023-03-14

这在客户端应用程序中是不可能的。Firebase身份验证只允许单个用户在任何给定时间登录。当您使用Email和Password调用CreateUsers时,这将有效地创建新用户,并同时让他们登录。然后,原始用户立即注销。

如果希望用户能够正确创建其他用户,则需要在所控制的后端上使用Firebase管理员SDK。它可以管理用户帐户,包括创建新帐户。您的应用程序将不得不以某种方式调用此后端。

 类似资料:
  • 问题内容: 我们正在为Joomla创建XML API,允许合作伙伴网站在我们的网站上为其用户创建新帐户。 我们已经创建了一个独立的PHP脚本来处理和验证API请求,但是现在我们需要实际创建新帐户。最初我们只是考虑进行CURL调用以提交注册表单,但是我们意识到用户令牌存在问题。是否有另一种干净的方法可以创建用户帐户而不用担心Joomla?如果我们必须做一些手术,最好的方法是什么? 问题答案: 您应该

  • 在我正在进行的一个项目中,我们使用了firebase Auth。 我找到了同样问题的答案,但在尝试实现后,它仍然不起作用(也许答案已经过时了?)。我正在使用firestore,而不是实时,以防相关。 这是我的代码:

  • 我是Firebase的新手。最近,我试图将用户保存到Firebase中,但我做不到。当我生成APK并将其运行到真实设备(而不是模拟器)上时,新用户不会将其添加到Firebase中。此外,没有显示任何错误。任务正确执行并转到OTPActivity。这是我的完整代码: 公共无效保存用户(){ 请帮帮我。提前谢谢。

  • 现在,我只想让那些已经注册并用我们的软件验证过的用户登录,我已经将用户的电子邮件列表(去掉特殊字符)保存在Firebase内部。当前,当用户登录时,我使用以下功能检查他们的邮件是否在此列表中: 虽然这种方法起作用,但它相当笨拙,因为用户仍然能够在函数回调被调用之前进行初始登录,并且他们的电子邮件仍然显示在FireBase中的“Authentication”选项卡中。 有没有更好的方法只允许预先验证

  • 我是新来的。 我目前正在开发一个应用程序,使用Vue.jsFirebase身份验证、Firebase实时数据库和Firebase云功能作为后端。应用程序必须包含一个管理员帐户的功能之一,该帐户可以为其他人创建帐户。创建后,新用户会收到一封电子邮件,其中包含登录名和登录密码。 因为注册方法(https://firebase.google.com/docs/auth/web/password-auth

  • 问题内容: 是否可以使用其他用户帐户在Windows上创建新进程?我知道有一个上下文菜单“运行方式”,但我想从Java中进行操作。我有用户名和密码。 问题答案: 您需要使用Java本机接口(JNI)编写DLL,因为您不能使用纯Java代码来执行此操作。 DLL本身需要调用 CreateProcessAsUser 函数在另一个用户的上下文中创建一个进程。要成功创建该过程,您需要提供对该函数的访问令牌