【问题标题】:Firebase Auth EmailAndPassword And Real time database ErrorFirebase Auth EmailAndPassword 和实时数据库错误
【发布时间】:2018-08-06 13:33:31
【问题描述】:

我正在尝试使用带有电子邮件和密码的身份验证在 android 上创建一个注册页面,然后将其他数据注册到实时数据库。当我单击“注册”按钮时,电子邮件和其他数据正在输入身份验证中。但其他数据不会处理到实时数据库中。

我也没有看到任何错误。

这是 MainActivity.java 文件

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


private TextView txtName, txtEmail, txtPassword, txtMobile;
private Spinner spinner;
private ProgressBar progressBar;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    txtName = findViewById(R.id.txtName);
    txtEmail = findViewById(R.id.txtEmail);
    txtPassword = findViewById(R.id.txtPassword);
    txtMobile = findViewById(R.id.txtMobile);

    progressBar = findViewById(R.id.progressBar);
    progressBar.setVisibility(View.GONE);

    spinner = findViewById(R.id.spinner);

    mAuth=FirebaseAuth.getInstance();

    findViewById(R.id.btnRegister).setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.btnRegister:
        registerUser();
        break;
    }
}

@Override
protected void onStart() {
    super.onStart();
    if(mAuth.getCurrentUser()!=null){

        //handle the already login user

    }
}

private void registerUser(){
    final String name = txtName.getText().toString().trim();
    final String email = txtEmail.getText().toString().trim();
    String password = txtPassword.getText().toString().trim();
    final String mobile = txtMobile.getText().toString().trim();
    final String gender = spinner.getSelectedItem().toString();


    if(name.isEmpty()) {
        txtName.setError("Name required!");
        txtName.requestFocus();
        return;
    }
    if(!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        txtEmail.setError("Enter a valid email!");
        txtName.requestFocus();
        return;
    }

    if(password.isEmpty()) {
        txtPassword.setError("Password Required!");
        txtPassword.requestFocus();
        return;
    }

    if(password.length()<6) {
        txtPassword.setError("Strong password required");
        txtPassword.requestFocus();
        return;
    }

    if(mobile.isEmpty()) {
        txtMobile.setError("Mobile Required!");
        txtMobile.requestFocus();
        return;
    }
    progressBar.setVisibility(View.VISIBLE);
    mAuth.createUserWithEmailAndPassword(email,password)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    if(task.isSuccessful()){
                        //Store additional fields into firebase database
                        User user = new User(
                                  name,
                                  email,
                                  mobile,
                                  gender

                        );

                        FirebaseDatabase.getInstance().getReference("Users")
                                .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
                            @Override
                            public void onComplete(@NonNull Task<Void> task) {
                                progressBar.setVisibility(View.GONE);
                                if(task.isSuccessful()){
                                    Toast.makeText(MainActivity.this,"User Registered Successfully!", Toast.LENGTH_LONG).show();
                                }else{
                                    Toast.makeText(MainActivity.this,"Error: Registration failed!", Toast.LENGTH_LONG).show();

                                }

                            }
                        });

                    }else{
                        Toast.makeText(MainActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                    }
                }
            });
}

}

这是 User.java 文件

public class User {
public String name, email, phone, gender;


public User(){

}

public User(String name, String email, String phone, String gender) {
    this.name = name;
    this.email = email;
    this.phone = phone;
    this.gender = gender;
}
}

【问题讨论】:

  • 要找出问题的原因,请在您的 onComplete 方法中记录/引发来自 Task 的错误。例如。 Toast.makeText(MainActivity.this,"Error: Registration failed!\n"+task.getException().toString(), Toast.LENGTH_LONG).show();

标签: android firebase firebase-realtime-database firebase-authentication


【解决方案1】:

https://firebase.google.com/docs/database/security/

您是否检查过项目的实时数据库安全规则?起初谷歌给你2个选项。其中一种是不允许第三者的锁定模式,另一种是允许所有人的测试模式。您可以在开发时使用测试模式,但出于安全原因,您应该制定自己的规则。

【讨论】:

  • 我使用了测试模式。这是我的安全规则 ` service cloud.firestore { ` match /databases/{database}/documents { match /{document=**} { 允许读,写; } } } `
  • 这些规则适用于 Cloud Firestore。 Firebase 实时数据库是一个独立的数据库,它有自己的安全规则,您可以通过console.firebase.google.com/u/0/project/_/database/_/rules 进行编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 2020-02-20
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多