![](/img/trans.png)
[英]Firebase Email and Password Authentication with android - User sign up
[英]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
这是我的注册按钮代码。 似乎与以前没有任何变化,但是这个有效。
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.