Я хочу проверить, когда пользователь пытается зарегистрироваться с помощью createUserWithEmailAndPassword()
в методе проверки подлинности пользователя Firebase, этот пользователь уже зарегистрирован в моем приложении.
Я хочу проверить, когда пользователь пытается зарегистрироваться с помощью createUserWithEmailAndPassword()
в методе проверки подлинности пользователя Firebase, этот пользователь уже зарегистрирован в моем приложении.
Чтобы определить, существует ли пользователь с таким адресом электронной почты, вы можете определить, когда произошел сбой вызова на createUserWithEmailAndPassword ()
с помощью auth/email-already-in-use
. Я вижу, что @Srinivasan только что опубликовал ответ на этот вопрос.
Кроме того, вы можете определить, что адрес электронной почты уже используется, позвонив по адресу fetchSignInMethodsForEmail()
(предыдущий - fetchProvidersForEmail()
).
Когда пользователь пытается создать пользователя с тем же адресом электронной почты, ответ задачи будет "Ответ: адрес электронной почты уже используется другой учетной записью".
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());
}
}
});
Прежде всего, вы должны убедиться, что это ограничение включено в консоли 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
. Как следует из названия, это исключение вызывается, если почта уже существует. Если созданное исключение является экземпляром этого класса, сообщите об этом пользователю.
Как следует из практики @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];
}
Я изучал такое состояние, в котором мы можем обнаружить, существует ли пользователь или нет, и выполнять регистрацию и логин. fetchProvidersForEmail
- лучший вариант прямо сейчас. Я нашел этот учебник. Надеюсь, это тоже поможет!
Смотрите: Управление пользователями
UserRecord userRecord = FirebaseAuth.getInstance().getUserByEmail(email);
System.out.println("Successfully fetched user data: " + userRecord.getEmail());
Этот метод возвращает объект UserRecord для пользователя, соответствующий предоставленной электронной почте.
Если предоставленное электронное письмо не принадлежит существующему пользователю или пользователь не может быть выбран по любой другой причине, Admin SDK выдает ошибку. Полный список кодов ошибок, включая описания и шаги по устранению, см. в разделе Ошибки API аутентификации администратора.
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();
}
});
Добавьте ниже код в файл MainActivity.java. Когда пользователь попытается зарегистрировать с тем же адресом электронной почты, появится сообщение "Адрес электронной почты уже используется другой учетной записью", появится как Тост
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();
}
}
});
Вам не нужно ничего делать, потому что бэкэнд Firebase выполнит эту работу.
Если вы не ссылаетесь на повторную аутентификацию приложения. Возьмем сценарий для примера, w