用if打开活动,用else打开另一个

时间:2018-12-31 21:17:03

标签: java android firebase authentication

我正在使用firebase auth创建应用程序,当用户使用电子邮件和密码登录时,用户将被发送到mainaActivity,这非常正常,我想向用户发送电子邮件“ admin@admin.com或admin1 @ admin”。 com或admin2@admin.com”访问main2Activity。 注意;我在firebase中通过上述电子邮件添加了3个用户。

package xxxx.xxxx;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class LoginActivity extends AppCompatActivity {
private EditText inputEmail;
private EditText inputPassword;
private FirebaseAuth auth;
private ProgressBar progressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // get Firebase auth instance
    auth = FirebaseAuth.getInstance();
    if (auth.getCurrentUser() != null) {
        startActivity(new Intent(LoginActivity.this, MainActivity.class));
        finish();
    }
    // set the view now
    setContentView(R.layout.activity_login);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setLogo(R.mipmap.gass_icon_144);
    toolbar.setTitle(getString(R.string.app_name));
    toolbar.setSubtitle(getString(R.string.title_2));
    setSupportActionBar(toolbar);
    inputEmail = (EditText) findViewById(R.id.email);
    inputPassword = (EditText) findViewById(R.id.password);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    Button register = (Button) findViewById(R.id.register_button);
    Button login = (Button) findViewById(R.id.login_button);
    Button reset = (Button) findViewById(R.id.reset_password);
    // get Firebase auth instance
    auth = FirebaseAuth.getInstance();
    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(LoginActivity.this, SelectActivity.class));
        }
    });

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String email = inputEmail.getText().toString();
            final String password = inputPassword.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;
            }
            progressBar.setVisibility(View.VISIBLE);
            //authenticate user
            auth.signInWithEmailAndPassword(email, password)
                    .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.
                            progressBar.setVisibility(View.GONE);
                            String admin1 = "admin@admin.com";
                            if (!task.isSuccessful()) {
                                if (password.length() < 6) {
                                    inputPassword.setError(getString(R.string.minimum_password));
                                } else {
                                    Toast.makeText(LoginActivity.this, getString(R.string.auth_failed),
                                            Toast.LENGTH_LONG).show();
                                }
                            } else if (inputEmail.getText().toString().equals(admin1)) {
                                startActivity(new Intent(LoginActivity.this, Main2Activity.class));
                                finish();
                            } else {
                                startActivity(new Intent(LoginActivity.this, MainActivity.class));
                                finish();
                            }
                        }
                    });
        }
    });
}
}

我不确定问题出在哪里。 我已经挣扎了2天

修改

我找到了解决问题的方法。 我在这里添加了字符串

    private ProgressBar progressBar;
    String admin = "admin@admin.com";
    String admin1 = "admin1@admin.com";
    String admin2 = "admin2@admin.com";

并更改了else if语句

    } else if (email.equals(admin)){
        startActivity(new Intent(LoginActivity.this, Main2Activity.class)); 

3 个答案:

答案 0 :(得分:0)

问题来自于此:

if (auth.getCurrentUser() != null) {
    startActivity(new Intent(LoginActivity.this, MainActivity.class));
    finish();
}

无论您使用什么电子邮件,它都会始终将您重定向到MainActivty。 您需要使用auth.getCurrentUser().getEmail();来获取电子邮件并测试您的状况。

答案 1 :(得分:0)

我建议您研究一下Firebase的自定义声明,从本质上讲,它允许您在用户帐户上定义自定义属性,例如角色。这将是为您的管理员帐户设置“ admin”标志的好地方。

https://firebase.google.com/docs/auth/admin/custom-claims

这比签入代码安全得多,因为任何人都可以查看您的源代码,并且知道有一个“ admin@admin.com”帐户。然后,他们将专注于获得对该帐户的访问权限。

您可以使用Firebase Admin SDK在Python中轻松设置这些值。

# Set admin privilege on the user corresponding to uid.
auth.set_custom_user_claims(uid, {'admin': True})
# The new custom claims will propagate to the user's ID token the
# next time a new one is issued.

然后在您的Android应用中,您可以检查用户是否为管理员。

user.getIdToken(false).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
  @Override
  public void onSuccess(GetTokenResult result) {
    boolean isAdmin = result.getClaims().get("admin");
    if (isAdmin) {
      // Show admin UI.
      showAdminUI();
    } else {
      // Show regular user UI.
      showRegularUI();
    }
  }
});

答案 2 :(得分:0)

在您的onCreate中,您正在此处检查已登录的实例 无论当前电子邮件如何,它将自动跳至MainActivity。您可以使用if else语句。您可以创建一种方法,用于在检查当前用户或登录时同时运行。 例子是

 df = df[df.score.isnull()]

如果任务在OnComplete中成功,则调用此方法。做到了,它奏效了。如果没有,我很乐意提供帮助