我正在使用户注册和使用Firebase登录。这是问题所在。
注册码:
public class Register extends AppCompatActivity implements View.OnClickListener {
private EditText registerName, registerEmail, registerPassword;
private ProgressBar progressBar;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
registerName = findViewById(R.id.register_name);
registerEmail = findViewById(R.id.register_email);
registerPassword = findViewById(R.id.register_password);
progressBar = findViewById(R.id.progressbar);
progressBar.setVisibility(View.GONE);
mAuth = FirebaseAuth.getInstance();
findViewById(R.id.btn_register).setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
if (mAuth.getCurrentUser() != null) {
//handle the already login user
}
}
private void registerUser() {
final String name = registerName.getText().toString().trim();
final String email = registerEmail.getText().toString().trim();
String password = registerPassword.getText().toString().trim();
if (name.isEmpty()) {
registerName.setError("name required");
registerName.requestFocus();
return;
}
if (email.isEmpty()) {
registerEmail.setError("email required");
registerEmail.requestFocus();
return;
}
if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
registerEmail.setError("enter a valid email");
registerEmail.requestFocus();
return;
}
if (password.isEmpty()) {
registerPassword.setError("password required");
registerPassword.requestFocus();
return;
}
if (password.length() < 6) {
registerPassword.setError("password should be at least 6 characters long");
registerPassword.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()) {
User user = new User(
name,
email
);
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()) {
openLoginActivity();
} else {
//display a failure message
}
}
});
} else {
Toast.makeText(Register.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
public void openLoginActivity() {
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_register:
registerUser();
break;
}
}
}
LoginActivity代码:
public class LoginActivity extends AppCompatActivity {
private EditText LoginEmail, LoginPassword;
private FirebaseAuth auth;
private Button btnLogin;
private Button JumpToRegister;
private DatabaseReference LoginDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
auth = FirebaseAuth.getInstance();
if (auth.getCurrentUser()!=null){
startActivity(new Intent(LoginActivity.this, inspector_profile.class));
finish();
}
LoginEmail = findViewById(R.id.email);
LoginPassword = findViewById(R.id.password);
btnLogin = findViewById(R.id.btn_login);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = LoginEmail.getText().toString();
final String password = LoginPassword.getText().toString();
if (TextUtils.isEmpty(email)) {
Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(password)) {
Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
return;
}
}
});
JumpToRegister = findViewById(R.id.btn_to_register);
JumpToRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LoginActivity.this, Register.class);
startActivity(intent);
}
});
}
private void loginUser(final String LoginEmail, final String LoginPassword) {
auth.signInWithEmailAndPassword(LoginEmail, LoginPassword)
.addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
// 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()) {
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
String RegisterUserID = currentUser.getUid();
LoginDatabase = FirebaseDatabase.getInstance().getReference()
.child("Users").child(RegisterUserID);
LoginDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String userType = dataSnapshot.child("userType").getValue().toString();
if (userType.equals("Inspector")){
Intent intentInspector = new Intent(LoginActivity.this, inspector_profile.class);
intentInspector.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intentInspector);
finish();
}else if (userType.equals("Group Leader")){
Intent intentIGrLd = new Intent(LoginActivity.this, grLd_profile.class);
intentIGrLd.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intentIGrLd);
finish();
}else if (userType.equals("Specialist Engineer")){
Intent intentISplEgn = new Intent(LoginActivity.this, SplEgn_profile.class);
intentISplEgn.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intentISplEgn);
finish();
}else if (userType.equals("Senior Manager")){
Intent intentISnMng = new Intent(LoginActivity.this, SnMng_profile.class);
intentISnMng.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intentISnMng);
finish();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
/* Intent intent = new Intent(LoginActivity.this, inspector_profile.class);
startActivity(intent);
finish();*/
} else {
// there was an error
FirebaseAuthException e = (FirebaseAuthException)task.getException();
Toast.makeText(LoginActivity.this, "Failed Login: "+e.getMessage(),Toast.LENGTH_SHORT).show();
return;
}
}
});
}
}
答案 0 :(得分:0)
当您从注册进入登录活动时,在登录的oncreate中,您正在检查用户是否已登录
if (auth.getCurrentUser()!=null){
startActivity(new Intent(LoginActivity.this, inspector_profile.class));
finish();
}
在firebase auth中进行注册时,它还会使用户登录。因此,您可能需要更改逻辑。