我正在注册项目,为了进行身份验证,我正在使用Firebase。现在,我希望我的代码仅验证或认证仅由gmail或yahoo或hotmail创建的那些电子邮件地址。新的电子邮件地址可以进行身份验证。如果用户编写不是在gmail或yahoo或hotmail中创建的电子邮件。它应该无法注册。 但是我的代码将获取每个随机电子邮件地址,无论该地址是否已经存在。在Firebase身份验证表中,它也显示了该电子邮件地址。 现在,我在验证每个电子邮件地址的代码中犯了什么错误。
代码:
package com.example.animation;
import android.content.Intent;
import android.graphics.Paint;
import android.graphics.drawable.AnimationDrawable;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class Signup extends AppCompatActivity {
RelativeLayout myLayout;
AnimationDrawable animationDrawable;
private EditText email_signup, password_signup, name_signup;
private Button signup_btn;
private FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
timing();
setValues();
TextView txt=findViewById(R.id.txt_signup);
txt.setPaintFlags(txt.getPaintFlags()| Paint.UNDERLINE_TEXT_FLAG);
firebaseAuth= FirebaseAuth.getInstance();
signup_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(validate()){
// database
String user_email=email_signup.getText().toString().trim();
String user_password=password_signup.getText().toString().trim();
String user_name=name_signup.getText().toString().trim();
firebaseAuth.createUserWithEmailAndPassword(user_email,user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful())
{
Toast.makeText(Signup.this,"Registeration Successful",Toast.LENGTH_SHORT).show();
startActivity(new Intent(Signup.this,MainActivity.class));
}
else
{
Toast.makeText(Signup.this,"Not Successful",Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
}
private void timing(){
myLayout=findViewById(R.id.signup_layout);
animationDrawable=(AnimationDrawable)myLayout.getBackground();
animationDrawable.setEnterFadeDuration(2500);
animationDrawable.setExitFadeDuration(2500);
animationDrawable.start();
}
private void setValues(){
email_signup=findViewById(R.id.email_reg);
password_signup=findViewById(R.id.pass_reg);
name_signup=findViewById(R.id.namebox);
signup_btn=findViewById(R.id.btn_register);
}
private Boolean validate(){
Boolean result=false;
String name=name_signup.getText().toString();
String password=password_signup.getText().toString();
String email=email_signup.getText().toString();
if(name.isEmpty()&& password.isEmpty()&&email.isEmpty()){
Toast.makeText(this,"Please enter all Details",Toast.LENGTH_SHORT).show();
}
else{
result=true;
}
return result;
}
}
答案 0 :(得分:0)
根据您的评论:
我希望用户使用已经在gmail,yahoo或hotmail上创建的电子邮件地址进行注册。像第一个一样,我将在gmail(ajstyles25@gmail.com)上创建ID,并且我希望在我注册应用程序时使用该ID,并且仅注册此电子邮件地址。现在,如果我正在写(ajstyle0900@gmail.com),它将接受它,我不想要
要解决此问题,您需要跟踪用户。这意味着您必须将用户的电子邮件地址保存在数据库中。为此,我建议您使用新的Cloud Firestore数据库或Firebase realtime database。现在要检查Cloud Firestore中是否存在用户,请从以下帖子中查看我的答案:
要检查用户是否存在于Firebase实时数据库中,请从以下帖子中查看我的答案:
通过这种方式,仅当用户已经存在于数据库中时,您才能调用createUserWithEmailAndPassword()
。