Работа с уже используемым адресом электронной почты - Firebase Authentication
В мое приложение встроена аутентификация gmail и facebook через Firebase. Я заметил, что если кто-то подписывается с помощью своего Gmail, а затем регистрируется с Facebook, если Facebook имеет тот же адрес электронной почты, что и Gmail, он получит ошибку:
"Адрес электронной почты уже используется другой учетной записью".
Является ли единственный разумный способ справиться с этим, чтобы пользователь мог войти с другими учетными данными? Может показывать сообщение типа "Электронная почта уже используется, пожалуйста, зарегистрируйтесь с другой учетной записью"?
4 ответа
Есть 3 способа решения этой проблемы.
Первый - проверить, существует ли адрес электронной почты, а затем отобразить сообщение. Это именно то, что вы сказали. Сообщение зависит от вас.
Второй подход - дать пользователям возможность иметь несколько учетных записей на один адрес электронной почты. Другими словами, если пользователь подписывается с помощью Gmail, а затем подписывается с помощью Facebook, и у него тот же адрес электронной почты, то он в конечном итоге имеет 2 разных аккаунта. Один адрес электронной почты, 2 разных аккаунта. Это не очень хорошая практика, но в соответствии с вашими потребностями вы даже можете использовать ее.
Третий подход - иметь только один аккаунт на один адрес электронной почты. Это означает, что вы запрещаете пользователям создавать несколько учетных записей, используя один и тот же адрес электронной почты с разными поставщиками аутентификации. Это обычная практика, а также правило по умолчанию в консоли Firebase. Это означает, что вы захотите позже внедрить другой вид аутентификации с другим провайдером, он будет следовать тому же правилу. В этом случае будет один адрес электронной почты с одной учетной записью.
Чтобы включить или отключить эту опцию, перейдите в консоль Firebase, выберите Authentication
выберите SIGN-IN METHOD
вкладку и в нижней части вашей страницы вы найдете Advanced
раздел.
Надеюсь, поможет.
Это случилось со мной, потому что я неправильно назвал метод. используйте signInWithEmailAndPassword
Поскольку в этой теме много похожих вопросов, я публикую свой метод для этой ошибки, так как я не нашел ответа, подходящего для конкретной ситуации.
Допустим, вы включили вход по электронной почте, а также в Facebook, и пользователь сначала регистрируется с помощью входа по электронной почте, а затем пытается войти в систему с помощью Facebook с тем же адресом электронной почты. Теперь, если вы не хотите связывать эту учетную запись с существующей или не хотите включать несколько учетных записей с одним адресом электронной почты, вы можете просто добавить всплывающее сообщение, которое будет уведомлять пользователя о том, что электронная почта уже используется. И тогда он не сможет войти через Facebook. Вот мой подход, который обрабатывает ошибку, когда пользователь пытается зарегистрироваться через Facebook с уже существующим адресом электронной почты:
private void handleFacebookAccessToken(AccessToken token) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
getTokenId();
updateUI(user);
} else {
Toast.makeText(SignInActivity.this, "Your Facebook email is already in use.", Toast.LENGTH_LONG).show();
}
}
});
}
Я в основном использовал код, предоставленный Firebase, и добавил оператор if-else (if (task.isSuccessful())
Надеюсь, это кому-то поможет!
void createuser(String email, String password) async {
try{
await FirebaseAuth.instance
.createUserWithEmailAndPassword(email: email, password: password);
}
on FirebaseAuthException catch (e){
if(e.code == "email-already-in-use"){
Get.showSnackbar(const GetSnackBar(
margin: EdgeInsets.all(15),
borderRadius: 8,
message:
('There already exists an account with the given email address.'),
duration: Duration(seconds: 3),
backgroundColor: Colors.red,
));
}
}
}
Вот пример ошибки аутентификации firebase «электронная почта уже используется».