注册后存储用户的电子邮件和密码

时间:2018-04-16 09:06:39

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

我正在制作具有用户个人资料的社交媒体应用。我想在完成注册后保存他们的个人资料数据。虽然注册成功,但用户的电子邮件和密码未保存在Firebase数据库中。我也检查了规则,我使用测试模式。

这是我的规则:

{
  "rules": {
".read": true,
".write": true
  }
}

这是我的代码:

public class SignUpActivity extends AppCompatActivity
{
    private Button btn_signin,btn_signup;
    private EditText inputEmail, inputPassword, inputconPassword;
    private ProgressBar progressBar;
    private FirebaseAuth auth;
    private FirebaseUser firebaseuser;

    private static final String PASSWORD_PATTERN ="((?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{6,20})";
    private static  final String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_up);
        auth = FirebaseAuth.getInstance();

        btn_signin = (Button) findViewById(R.id.btn_signin);
        btn_signup = (Button) findViewById(R.id.btn_signup);
        inputEmail = (EditText) findViewById(R.id.u_email);
        inputPassword = (EditText) findViewById(R.id.u_password);
        inputconPassword = (EditText) findViewById(R.id.u_conpassword);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        btn_signin.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                startActivity(new Intent(SignUpActivity.this, LoginActivity.class));
            }
        });

        btn_signup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final String email = inputEmail.getText().toString().trim();
            final String password = inputPassword.getText().toString().trim();

            if (!validateForm())
            {
                return;
            }

            progressBar.setVisibility(View.VISIBLE);

            //create user
            auth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            progressBar.setVisibility(View.GONE);
                            // If sign in fails, display a message to the user. If sign in succeeds
                            // the auth state listener will be notified and logic to handle the
                            // signed in user can be handled in the listener.
                            if (!task.isSuccessful())
                            {
                                Toast.makeText(SignUpActivity.this, "Authentication failed." + task.getException(),
                                        Toast.LENGTH_SHORT).show();
                            }
                            else
                                {
                                    Toast.makeText(SignUpActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
                                    firebaseuser = auth.getCurrentUser();
                                    User myUserInsertObj = new User(inputEmail.getText().toString().trim(),inputconPassword.getText().toString().trim());
                                    DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");
                                    String uid = firebaseuser.getUid();

                                    ref.child(uid).setValue(myUserInsertObj).addOnCompleteListener(new OnCompleteListener<Void>() {
                                            @Override
                                            public void onComplete(@NonNull Task<Void> task)
                                            {
                                                if(task.isSuccessful())
                                                {
                                                    Toast.makeText(SignUpActivity.this, "User data stored.",Toast.LENGTH_SHORT).show();
                                                    finish();
                                                    startActivity(new Intent(getApplicationContext(), Main2Activity.class));
                                                }
                                                else
                                                {
                                                    Toast.makeText(SignUpActivity.this, "Error.",Toast.LENGTH_SHORT).show();
                                                    finish();
                                                    startActivity(new Intent(getApplicationContext(), Main3Activity.class));
                                                }
                                            }
                                        });
                            }
                        }
                    });
        }
    });
}

    private boolean validateForm()
    {
        boolean valid = true;

        String email = inputEmail.getText().toString();
        if (TextUtils.isEmpty(email))
        {
            inputEmail.setError("Required.");
            valid = false;
        }

        String password =inputPassword.getText().toString();
        String conpassword = inputconPassword.getText().toString();
        if (TextUtils.isEmpty(password))
        {
            inputPassword.setError("Required.");
            valid = false;
        }

        if (TextUtils.isEmpty(conpassword))
        {
            inputconPassword.setError("Required.");
            valid = false;
        }

        if(email.length()>0 && password.length()>0 && conpassword.length()>0)
        {
            if (isEmailValid(email))
            {
                inputEmail.setError(null);
                if (isValidPassword(password))
                {
                    inputPassword.setError(null);
                    if (isValidPassword(conpassword))
                    {
                        inputconPassword.setError(null);
                        if (password.equals(conpassword))
                        {
                            return valid;
                        }
                        else
                        {
                            Toast.makeText(getApplicationContext(), "Password not matched.Try again.", Toast.LENGTH_SHORT).show();
                            valid = false;
                        }
                    }
                    else
                    {
                        Toast.makeText(getApplicationContext(), "Password must contains minimum 6 characters at least 1 Lowercase, 1 Uppercase and, 1 Number.", Toast.LENGTH_SHORT).show();
                    valid = false;
                    }
                }
                else
                {
                    Toast.makeText(getApplicationContext(), "Password must contains minimum 6 characters at least 1 Lowercase, 1 Uppercase and, 1 Number.", Toast.LENGTH_SHORT).show();
                    valid = false;
                }
            }
            else
            {
                Toast.makeText(getApplicationContext(), "Email invalid.", Toast.LENGTH_SHORT).show();
                valid = false;
            }
        }
        return valid;
    }

    public static boolean isEmailValid(String email)
    {
       Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }

    public static boolean isValidPassword(final String password)
    {
        Pattern pattern;
        Matcher matcher;
        pattern = Pattern.compile(PASSWORD_PATTERN);
        matcher = pattern.matcher(password);
        return matcher.matches();
    }

    @Override
    protected void onResume() {
        super.onResume();
        progressBar.setVisibility(View.GONE);
    }
}

4 个答案:

答案 0 :(得分:1)

要在注册后存储用户的电子邮件和密码,请执行以下操作:

String email=inputEmail.getText().toString().trim();
String password=inputconPassword.getText().toString().trim();
FirebaseUser currentUser= task.getResult().getUser();
String userid=currentUser.getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users").child(userid);
ref.child("email").setValue(email);
ref.child("password").setValue(password);

然后你会:

Users
  userid
    email: email_here
    password: password_here

更多信息:

https://firebase.google.com/docs/database/android/read-and-write

答案 1 :(得分:0)

answer可以让您更深入地了解firebase如何处理身份验证信息(电子邮件+密码)..

此类信息存储在单独的数据库中,因此如果您想存储用户数据,则必须自己完成。

您可以找到有关如何存储用户数据的here的更多详细信息。

答案 2 :(得分:0)

为什么要在Firebase中存储纯文本密码?这是一个糟糕的主意。 Firebase Auth已经对您的用户密码进行哈希处理。如果您需要迁移到外部系统,他们会通过CLI SDKAdmin SDK提供多种工具。

答案 3 :(得分:0)

这是我的注册代码按钮。它似乎没有从以前的变化,但这一个有效。

        btn_signup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String email = inputEmail.getText().toString().trim();
            final String password = inputPassword.getText().toString().trim();

            if (!validateForm())
            {
                return;
            }

            progressBar.setVisibility(View.VISIBLE);

            //create user
            auth.createUserWithEmailAndPassword(email, password)
                    .addOnCompleteListener(SignUpActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            progressBar.setVisibility(View.GONE);
                            // If sign in fails, display a message to the user. If sign in succeeds
                            // the auth state listener will be notified and logic to handle the
                            // signed in user can be handled in the listener.
                            if (task.isSuccessful())
                            {
                                DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");

                                firebaseUser = auth.getCurrentUser();
                                String uid = firebaseUser.getUid();

                                User my = new User(email,password);

                                ref.child(uid).setValue(my).addOnCompleteListener(new OnCompleteListener<Void>() {
                                    @Override
                                    public void onComplete(@NonNull Task<Void> task)
                                    {
                                        if(task.isSuccessful())
                                        {
                                            Toast.makeText(SignUpActivity.this, "Sign Up successfully.",Toast.LENGTH_SHORT).show();
                                            finish();
                                            startActivity(new Intent(getApplicationContext(), Main2Activity.class));
                                        }
                                        else
                                        {
                                            Toast.makeText(SignUpActivity.this, "Error.",Toast.LENGTH_SHORT).show();
                                            finish();
                                            startActivity(new Intent(getApplicationContext(), Main3Activity.class));
                                        }
                                    }
                                });


                            }
                            else
                                {
                                    Toast.makeText(SignUpActivity.this, "Authentication failed." + task.getException(),
                                            Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
        }
    });
相关问题