android - 更改firebase规则后登录不起作用
问题描述
我正在开发一个简单的 android 应用程序,用户在其中创建帐户,然后使用 google firebase 登录。用户通过向其手机号码发送 OTP 进行身份验证。一旦用户通过输入 OTP 验证他们的手机号码,就会在 Firebase 中创建一个帐户。同时一些附加信息(姓名、用户名、密码、电子邮件等)保存在实时数据库中。
签码
final String userEnteredUsername = username.getEditText().getText().toString().trim();
final String userEnteredPassword = password.getEditText().getText().toString().trim();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("users");
Query checkUser = reference.orderByChild("username").equalTo(userEnteredUsername);
checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
username.setError(null);
username.setErrorEnabled(false);
for (DataSnapshot user : dataSnapshot.getChildren()) {
UserHelperClass usersBean =
user.getValue(UserHelperClass.class);
String passwordFromDB = usersBean.password;
if (passwordFromDB.equals(userEnteredPassword)) {
String nameFromDB = usersBean.name;
String usernameFromDB= usersBean.username;
String phoneNoFromDB= usersBean.phoneNo;
String emailFromDB= usersBean.email;
User localUser = new User(usernameFromDB, phoneNoFromDB);
SharedPrefManager.getInstance(getApplicationContext()).userLogin(localUser);
Intent intent = new Intent(Login.this, HomeActivity.class);
intent.putExtra("name", nameFromDB);
intent.putExtra("username", usernameFromDB);
intent.putExtra("email", emailFromDB);
intent.putExtra("phoneNo", phoneNoFromDB);
intent.putExtra("password", passwordFromDB);
startActivity(intent);
Login.this.finish();
progressBar.setVisibility(View.GONE);
}else {
progressBar.setVisibility(View.GONE);
password.setError("Wrong Password");
password.requestFocus();
}
}
}else{
progressBar.setVisibility(View.GONE);
username.setError("No such User exist");
username.requestFocus();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
注册码
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(VerifyPhoneNo.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
progressBar.setVisibility(View.GONE);
if ( getIntent().getStringExtra("whatToDo").equalsIgnoreCase("updateData") ){
updateOldUserData();
}else {
UserHelperClass userHelperClass = new UserHelperClass(name, username, email, phoneNo, password);
reference.child(phoneNo).setValue(userHelperClass);
Intent intent = new Intent(VerifyPhoneNo.this, AccountCreatedSuccessfullyMessageActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
name = getIntent().getStringExtra("name").trim();
username = getIntent().getStringExtra("username").trim();
email = getIntent().getStringExtra("email").trim();
phoneNo = getIntent().getStringExtra("phoneNo").trim();
password = getIntent().getStringExtra("password").trim();
intent.putExtra("name", name);
intent.putExtra("username", username);
intent.putExtra("email", email);
intent.putExtra("phoneNo", phoneNo);
intent.putExtra("password", password);
startActivity(intent);
finish();
}
} else {
Toast.makeText(VerifyPhoneNo.this, task.getException().getMessage().toString(), Toast.LENGTH_SHORT).show();
Log.i("error", task.getException().getMessage().toString());
progressBar.setVisibility(View.GONE);
}
}
});
为了限制未经授权的用户,我将规则更改如下
{
"rules": {
"users": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
}
}
}
现在登录停止工作。请帮助我在哪里做错了。谢谢你