首页 > 解决方案 > 更改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"
      }
    }
  }
}

现在登录停止工作。请帮助我在哪里做错了。谢谢你

标签: androidfirebaseauthenticationfirebase-realtime-databasefirebase-authentication

解决方案


推荐阅读