繁体   English   中英

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

[英]Store user's email and password after sign up

我正在制作具有用户个人资料的社交媒体应用程序。 我想在他们完成注册后保存他们的个人资料数据。 虽然注册成功,但是用户的邮箱和密码并没有保存在 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);
    }
}

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

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

这个答案可能会让您更深入地了解 firebase 如何处理身份验证信息(电子邮件+密码)。

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

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

为什么要在 Firebase 中存储纯文本密码? 这是一个可怕的想法。 Firebase Auth 已经对您用户的密码进行了散列和加盐。 如果您需要迁移到外部系统,他们会通过CLI SDKAdmin SDK提供多种工具来执行此操作。

这是我的注册按钮代码。 似乎与以前没有任何变化,但是这个有效。

        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();
                            }
                        }
                    });
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM