java - 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?
解决方案
这似乎是设计使然。但我看到了两种可能的解决方案:
- 创建第二个 Firebase 客户端实例,连接到同一个项目,并使用它来创建新用户。可以在此处找到有关如何执行此操作的详细信息:https ://firebase.google.com/docs/configure/
或者
- 创建一个接收电子邮件和密码的云函数,并使用管理 SDK 创建用户,并使用 HttpsCallable 从您的应用程序调用它。您还可以在那里获取当前用户,并且仅当用户是管理员时才允许该请求。更多详情:https ://firebase.google.com/docs/functions/callable
推荐阅读
- ios - Swift .SQLCLIENT 我怎样才能使完成无效?
- wordpress - 如何访问 vc_map() 内部值来为 WPBakery 界面创建自定义标记?
- .net - RDWeb 身份验证和 MFA 与 Azure
- c# - 为什么我的http请求从2017年切换到vs 2019后没有body?
- html - 如何制作具有定义宽度的代码块?
- javascript - Firebase 提供失败的前提条件错误
- html - 响应式设计 - 调整窗口大小时 Div 消失
- android - 如何在使用菜单项选择的选项项上附加片段
- arrays - 如何返回指示Ruby中数组的最大到最小整数位置的索引
- python - Tensorflow Batchnormalization - TypeError:轴必须是 int 或 list,类型给定: