用户登录后返回应用程序时,如何防止用户一次又一次登录?

时间:2019-07-07 12:55:19

标签: android firebase firebase-authentication

我正在使用Firebase在Android中创建登录注销。

我的代码几乎完成了,但是我无法解决的一件事是,当用户注册时,必须将活动从注册活动转移到登录活动。 登录后,一段时间后再次打开应用程序时,我希望用户无需再次登录。它必须已经登录。

我已经编写了用于检查用户是否已经登录但无法处理以下两种情况的代码:

  1. 首先,如果我在登录活动的onCreate内应用代码:成功注册后进行注册时,该活动将直接带我进入家庭活动,但是当我重新启动登录活动时,它需要带我进入登录活动应用程序,无需再次登录。

  2. 其次,当我删除代码时:成功注册后,该活动通常需要我在登录活动中登录并 重新启动应用程序时,问题是我需要再次登录。

这是登录活动的代码:

    public class LoginActivity extends AppCompatActivity {
    private Button login;
    private EditText username,password;
    private ProgressDialog progressDialog;
    private FirebaseAuth checklogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        username=findViewById(R.id.adminemail);
        password=findViewById(R.id.adminpass);

        progressDialog = new ProgressDialog(this);

        checklogin=FirebaseAuth.getInstance();


//the code for what I am talking is starting from here.
 /*if(checklogin.getCurrentUser()!=null){
    finish();
    startActivity(new Intent(getApplicationContext(),AdminHome.class));
 }*/
//till here

 }

  public void login(View view) {
   String email=username.getText().toString();
   String pass=password.getText().toString();

   if(TextUtils.isEmpty(email)){

   Toast.makeText(this, "Please enter email", Toast.LENGTH_SHORT).show();
     return;
   }
   if(TextUtils.isEmpty(pass)){
 Toast.makeText(this,"Please enter password",Toast.LENGTH_SHORT).show();
    return;
  }

        progressDialog.setMessage("Logging in...");
        progressDialog.show();

   checklogin.signInWithEmailAndPassword(email,pass)
         .addOnCompleteListener(this,new 
             OnCompleteListener<AuthResult>() {
                    @Override
    public void onComplete(@NonNull Task<AuthResult> 
      progressDialog.dismiss();
      if(task.isSuccessful()){
         finish();
      startActivity(new Intent(getApplicationContext(),AdminHome.class));
        }
       } 
    });

   }
 }


 //from here my registration activity starts
 public class RegisterActivity extends AppCompatActivity{

 private Button registeradmin;
 private EditText username;
 private EditText password;

 private ProgressDialog progressDialog;

 private FirebaseAuth mAuth;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    progressDialog =new ProgressDialog(this);

    mAuth=FirebaseAuth.getInstance();

    if(mAuth.getCurrentUser()!=null){
        finish();
      startActivity(new Intent(getApplicationContext(),AdminHome.class));
    }

    username=findViewById(R.id.regemail);
    password=findViewById(R.id.regpass);
    registeradmin=findViewById(R.id.register);

    //registering admin method call
    registeradmin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            register();
        }
    });
  }

//registering admin
 private void register () {
    String email = username.getText().toString();
    String pass = password.getText().toString();

    if(TextUtils.isEmpty(email)){

   Toast.makeText(this, "Please enter email", Toast.LENGTH_SHORT).show();
        return;
    }
    if(TextUtils.isEmpty(pass)){

  Toast.makeText(this,"Please enter password",Toast.LENGTH_SHORT).show();
        return;
    }

    progressDialog.setMessage("Registering Admin...");
    progressDialog.show();

    mAuth.createUserWithEmailAndPassword(email,pass)
            .addOnCompleteListener(this, new 
                OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
          if(task.isSuccessful()){
          FirebaseUser user=mAuth.getCurrentUser();
          Toast.makeText(RegisterActivity.this,"Successfully Registered",Toast.LENGTH_SHORT).show();
        Intent i = new Intent(RegisterActivity.this,LoginActivity.class);
        startActivity(i);
        finish();
       }
       else{
       Toast.makeText(RegisterActivity.this,"Could not register... Please try again",Toast.LENGTH_SHORT).show();
       }
       progressDialog.dismiss();
       }
     });
    }
   }

实际上,我希望应用程序能够正常运行,即成功注册后,该活动必须在登录活动时重定向我,并且在登录并再次重新启动该应用程序后,我无需再次登录。

4 个答案:

答案 0 :(得分:1)

您需要将用户名存储在sharedpreferences中,有无数的教程描述了如果您搜索sharedpreferences,

Follow this concept也是This question

答案 1 :(得分:1)

在您的onStart中执行此操作-

@Override
public void onStart() {
    super.onStart();
    // Check if the user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    // do your stuff
            if (currentUser != null) {
                // go to MainActivity
            } else {
                // user doesn't exist 
            }

}

通过这种方式,您不必担心从活动到活动的导航。

答案 2 :(得分:0)

我认为它的工作方式类似于:

FirebaseAuth.getInstance()。getCurrentUser()

如果用户未登录,则应返回null。

答案 3 :(得分:0)

您可能希望使用AuthStateListener进行调查。

在以下事件中将调用列表侦听器;

  • 在注册收听者之后

  • 用户登录时

  • 当前用户退出时
  • 当前用户更改时

您可以使用此侦听器跟踪用户是否已登录。 可以找到文档here