我想检查用户是否尝试在Firebase用户身份验证方法中使用<a href="http://www.test.nl/result?card_id=1&card_id=2">Card 1</a>
注册,此用户已在我的应用中注册。
答案 0 :(得分:12)
要检测具有该电子邮件地址的用户是否已存在,您可以检测到对createUserWithEmailAndPassword ()
的调用何时失败并显示auth/email-already-in-use
。我看到@Srinivasan刚刚发布了一个答案。
或者,您可以通过调用fetchSignInMethodsForEmail()
(之前称为fetchProvidersForEmail()
)来检测是否已使用电子邮件地址。
答案 1 :(得分:11)
当用户尝试使用相同的电子邮件地址创建用户时,任务响应将为&#34;响应:该电子邮件地址已被其他帐户使用。&#34; < / p>
mFirebaseAuth.createUserWithEmailAndPassword(email,password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
//User registered successfully
}else{
Log.i("Response","Failed to create user:"+task.getException().getMessage());
}
}
});
答案 2 :(得分:6)
首先,您需要确保在Firebase控制台中启用了该限制(帐户和电子邮件地址设置)。看看@ Srinivasan的答案。
然后,在您的java代码中执行此操作:
firebaseAuthenticator.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
Toast.makeText(SignUpActivity.this, "User with this email already exist.", Toast.LENGTH_SHORT).show();
}
} else {
sendVerificationEmail();
startActivity(new Intent(SignUpActivity.this, DetailsCaptureActivity.class));
}
// ...
}
});
这就是诀窍发生的地方:
if (task.getException() instanceof FirebaseAuthUserCollisionException) {
Toast.makeText(SignUpActivity.this,
"User with this email already exist.", Toast.LENGTH_SHORT).show();
使用电子邮件和密码注册用户时可能会抛出几个异常,但我们感兴趣的是FirebaseAuthUserCollisionException
。顾名思义,如果电子邮件已经存在,则抛出此异常。如果抛出的异常是此类的实例,请让用户知道。
答案 3 :(得分:4)
作为@ Frank的答案,这里的答案是使用fetchProvidersForEmail()
private boolean checkAccountEmailExistInFirebase(String email) {
FirebaseAuth mAuth = FirebaseAuth.getInstance();
final boolean[] b = new boolean[1];
mAuth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>() {
@Override
public void onComplete(@NonNull Task<ProviderQueryResult> task) {
b[0] = !task.getResult().getProviders().isEmpty();
}
});
return b[0];
}
答案 4 :(得分:3)
我正在调查这种情况,我们可以检测用户是否存在并执行注册和登录。 fetchProvidersForEmail
现在是最佳选择。我找到了 this 教程。希望它也能帮到你!
答案 5 :(得分:1)
请参阅:Manage Users
UserRecord userRecord = FirebaseAuth.getInstance().getUserByEmail(email);
System.out.println("Successfully fetched user data: " + userRecord.getEmail());
此方法为与提供的电子邮件相对应的用户返回UserRecord对象。
如果提供的电子邮件不属于现有用户,或者由于任何其他原因而无法提取该用户,则Admin SDK会引发错误。有关错误代码的完整列表,包括描述和解决步骤,请参见Admin Authentication API Errors。
答案 6 :(得分:0)
private ProgressDialog progressDialog;
progressDialog.setMessage("Registering, please Wait...");
progressDialog.show();
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
//checking if success
if (task.isSuccessful()) {
//Registration was successfull:
Toast.makeText(RegistrationActivity.this, "Successfully registered!", Toast.LENGTH_LONG).show();
} else {
//Registration failed:
//task.getException().getMessage() makes the magic
Toast.makeText(RegistrationActivity.this, "Registration failed! " + "\n" + task.getException().getMessage(), Toast.LENGTH_LONG).show();
}
progressDialog.dismiss();
}
});
答案 7 :(得分:0)
将以下代码添加到 MainActivity.java 文件。当用户尝试使用相同的电子邮件地址注册消息时,该电子邮件地址已被其他帐户使用&#34;将弹出为 Toast
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(!task.isSuccessful()){
Toast.makeText(MainActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
if(task.isSuccessful()){
Toast.makeText(MainActivity.this, "Sign up successfull", Toast.LENGTH_SHORT).show();
}
}
});
答案 8 :(得分:-2)
您无需执行任何操作,因为Firebase的后端将完成此任务。
除非您指的是重新验证该应用。 举一个例子,w