Android 检查给定的电子邮件是否存在
有没有办法知道用户输入的电子邮件在Firebase中是否真实?内置的“使用电子邮件和密码注册”方法是否具有此功能Android 检查给定的电子邮件是否存在,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,有没有办法知道用户输入的电子邮件在Firebase中是否真实?内置的“使用电子邮件和密码注册”方法是否具有此功能 编辑:很抱歉误会了。我不在乎以前是否使用过该电子邮件,我需要知道的是:如果输入的电子邮件是“虚构”或“真实存在”是的,您可以创建新帐户或登录: 要创建,请阅读createUserWithEmailAndPassword createUserWithEmailAndPassword引发3个异常: FirebaseAuthWeakPasswordException:如果密码不够强 Fir
编辑:很抱歉误会了。我不在乎以前是否使用过该电子邮件,我需要知道的是:如果输入的电子邮件是“虚构”或“真实存在”是的,您可以创建新帐户或登录: 要创建,请阅读
createUserWithEmailAndPassword
createUserWithEmailAndPassword
引发3个异常:
FirebaseAuthWeakPasswordException
:如果密码不够强FirebaseAuthInvalidCredentialsException
:如果电子邮件地址格式不正确FirebaseAuthUserCollisionException
:如果已经存在具有给定电子邮件地址的帐户onCompleteListener
或onFailureListener
这里有一个示例,mAuth
是FirebaseAuth
实例:
mAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(
new OnCompleteListener<AuthResult>()
{
@Override
public void onComplete(@NonNull Task<AuthResult> task)
{
if (!task.isSuccessful())
{
try
{
throw task.getException();
}
// if user enters wrong email.
catch (FirebaseAuthWeakPasswordException weakPassword)
{
Log.d(TAG, "onComplete: weak_password");
// TODO: take your actions!
}
// if user enters wrong password.
catch (FirebaseAuthInvalidCredentialsException malformedEmail)
{
Log.d(TAG, "onComplete: malformed_email");
// TODO: Take your action
}
catch (FirebaseAuthUserCollisionException existEmail)
{
Log.d(TAG, "onComplete: exist_email");
// TODO: Take your action
}
catch (Exception e)
{
Log.d(TAG, "onComplete: " + e.getMessage());
}
}
}
}
);
这可能是迟来的回答,但仅仅对于路过的人来说,可能会从回答中受益。我认为检查电子邮件是否存在的最好方法是将验证电子邮件发送到输入电子邮件 尝试查看此链接
Firebase提供了非常简单的方法来验证用户电子邮件。几乎不可能检查输入的电子邮件是否存在,但是您可以检查输入的电子邮件字符串是否符合有效的电子邮件结构:
if(!isValidEmail(etEmail.getText().toString())) {
Toast.makeText(getActivity(), "Invalid input for email", Toast.LENGTH_LONG).show();
然后像Jin Liu建议的那样,使用sendEmailVerification(),如:
mFirebaseUser.sendEmailVerification().addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful())
Toast.makeText(getContext(),“已发送电子邮件验证”,Toast.LENGTH_LONG.show();
否则{
试一试{
抛出task.getException();
}捕获(例外e){
Toast.makeText(getContext(),e.getMessage(),Toast.LENGTH_LONG.show();
}
}
}
});
这是另一个没有任何创建用户或登录过程的解决方案
//check email already exist or not.
firebaseAuth.fetchSignInMethodsForEmail(email)
.addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
@Override
public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
boolean isNewUser = task.getResult().getSignInMethods().isEmpty();
if (isNewUser) {
Log.e("TAG", "Is New User!");
} else {
Log.e("TAG", "Is Old User!");
}
}
});
//检查电子邮件是否已存在。
firebaseAuth.FetchSignInMethodForEmail(电子邮件)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
布尔值isNewUser=task.getResult().getSignInMethods().isEmpty();
if(isNewUser){
Log.e(“标签”,“是新用户!”);
}否则{
Log.e(“TAG”,“Is Old User!”);
}
}
});
使用以下方法:
task.getException().getMessage()获取异常您可能正在查找以下信息:如果您想知道电子邮件地址是否实际归用户所有,您的应用程序可以调用user.sendEmailVerification():如果您输入的电子邮件与代码不存在,则结果总是错误的密码…如果用户与电子邮件一起存在,那么,如何使用这种方法获取该用户的UID呢?我认为这种解决方案比上述所有解决方案都要好得多。这应该是最重要的!!
mFirebaseUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful())
Toast.makeText(getContext(), "Email Verfication Sent", Toast.LENGTH_LONG).show();
else {
try{
throw task.getException();
}catch (Exception e) {
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
});
//check email already exist or not.
firebaseAuth.fetchSignInMethodsForEmail(email)
.addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
@Override
public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
boolean isNewUser = task.getResult().getSignInMethods().isEmpty();
if (isNewUser) {
Log.e("TAG", "Is New User!");
} else {
Log.e("TAG", "Is Old User!");
}
}
});