我创建了一个登录注册应用程序。我使用电子邮件和密码进行注册。我还补充一点,如果用户注册成功,设备 ID 将保存到数据库中。我想要那个 id 设备 ID 注册到一个帐户中,用户无法使用该设备创建新帐户,我还希望如果数据库设备 ID 与当前设备 ID 匹配,则允许用户登录或不登录。我该如何解决这个问题?通过使用查询 ?
创建一个名为 USerId 的子项。试试这个:
// save data to firebase
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference ezzeearnRef = rootRef.child("UserId");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//here android_id is IMEI number
if (dataSnapshot.child(android_id).exists()) {
//show what u want
} else {
//creating a new user
firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
//checking if success
if (task.isSuccessful()) {
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("UserId").child(android_id).setValue(0);
finish();
startActivity(new Intent(MainActivity.this, LoginActivity.class));
} else {
//display some message here
Toast.makeText(MainActivity.this, "Registration Error", Toast.LENGTH_LONG).show();
}
progressDialog.dismiss();
}
});
}
public class LoginActivity extends AppCompatActivity {
// vew banding
private ActivityLoginBinding binding;
//fibase atuh
private FirebaseAuth firebaseAuth;
//progress dialog
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityLoginBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
//inti firbase atuh
firebaseAuth = FirebaseAuth.getInstance();
//setup progress dialog
progressDialog = new ProgressDialog(this);
progressDialog.setTitle("please wait...");
progressDialog.setCanceledOnTouchOutside(false);
// handel click go to regster
binding.noAccountTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(LoginActivity.this,
RegisterActivity.class));
}
});
// handel click bifen login
binding.loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
validataData();
}
});
}
private String email ="" , password="";
private void validataData() {
//getdata
email = binding.emailEt.getText().toString().trim();
password = binding.passwordEt.getText().toString().trim();
//validata data
如果(!Patterns.EMAIL_ADDRESS.matcher(email).matches()){
Toast.makeText(this, "Invalid email pattern...!", Toast.LENGTH_SHORT).show();
}
else if (TextUtils.isEmpty(password)){
Toast.makeText(this, "Enter password...!",
Toast.LENGTH_SHORT).show();
}
else {
//data is vaid data login
loginUser();
}
}
private void loginUser() {
//show progress
progressDialog.setMessage("Logging In...");
progressDialog.show();
//login user
firebaseAuth.signInWithEmailAndPassword(email,password)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
//login success , chek user if user or admin
chekUser();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure( Exception e) {
//login faild
progressDialog.dismiss();
Toast.makeText(LoginActivity.this, ""+e.getMessage(),
Toast.LENGTH_SHORT).show();
}
});
}
private void chekUser() {
progressDialog.setMessage("Checking User...");
//chek user if user or admin for realtime database
//get crunt user
FirebaseUser firebaseUser=firebaseAuth.getCurrentUser();
//cheak in db
DatabaseReference ref =
FirebaseDatabase.getInstance().getReference("Users");
ref.child(firebaseUser.getUid())
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange( DataSnapshot snapshot) {
progressDialog.dismiss();
//get user typy
String userType =
""+snapshot.child("userType").getValue();
//chek userType
if (userType.equals("0")){
// thise is user soimpel open user dshbord
startActivity(new Intent(LoginActivity.this,
DashboardOneNozom.class));
finish();
}
else if (userType.equals("1")){
// thise is admin soimpel open admin dshbord
startActivity(new Intent(LoginActivity.this,
DashboardTowNozom.class));
finish();
}
}
@Override
public void onCancelled( DatabaseError error) {
}
});
}
}