Java FireBase身份验证身份验证状态已更改
我希望能够根据用户的登录状态是否发生变化,将意图传递给活动 我必须在LoginActivity的OnCreate方法中遵循AuthStateListener 如果用户已登录,则我希望将其转发到MainActivity 但是,如果用户已注销,则需要转到LoginActivity 当他们注销时,问题就来了,它陷入了一个无限循环,不断地向后勤活动发起攻击 当身份验证状态更改时,是否有任何方法可以告诉用户在哪里(哪个活动)。这样,我就可以将已签出的意图调用放在if语句中,以检查它们是否已经在loginacitivity中,从而防止循环Java FireBase身份验证身份验证状态已更改,java,android,android-intent,firebase,Java,Android,Android Intent,Firebase,我希望能够根据用户的登录状态是否发生变化,将意图传递给活动 我必须在LoginActivity的OnCreate方法中遵循AuthStateListener 如果用户已登录,则我希望将其转发到MainActivity 但是,如果用户已注销,则需要转到LoginActivity 当他们注销时,问题就来了,它陷入了一个无限循环,不断地向后勤活动发起攻击 当身份验证状态更改时,是否有任何方法可以告诉用户在哪里(哪个活动)。这样,我就可以将已签出的意图调用放在if语句中,以检查它们是否已经在logina
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Intent intent = new Intent(getBaseContext(), MainActivity.class);
//intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
Log.d("LOG_Login", "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
String className = this.getClass().getSimpleName();
if (!(className == "LoginActivity")) {
Intent intent = new Intent(getBaseContext(), LoginActivity.class);
//intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
}
Log.d("LOG_Login", "onAuthStateChanged:signed_out");
}
// ...
}
};
最后,答案相当合乎逻辑 我将Firebase Auth调用移到了我的主活动中,并修改了流程以将意图转发给登录活动,而不是反过来。这避免了任何无限循环
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
// Intent intent = new Intent(getBaseContext(), MainActivity.class);
//intent.putExtra("EXTRA_SESSION_ID", sessionId);
// startActivity(intent);
// Log.d("LOG_Login", "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
String className = this.getClass().getName();
if (!(className == "LoginActivity")) {
Intent intent = new Intent(getBaseContext(), LoginActivity.class);
// intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
}
Log.d("LOG_Login", "onAuthStateChanged:signed_out");
}
// ...
}
};
mAuth.addAuthStateListener(mAuthListener);
最后,答案相当合乎逻辑 我将Firebase Auth调用移到了我的主活动中,并修改了流程以将意图转发给登录活动,而不是反过来。这避免了任何无限循环
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
// Intent intent = new Intent(getBaseContext(), MainActivity.class);
//intent.putExtra("EXTRA_SESSION_ID", sessionId);
// startActivity(intent);
// Log.d("LOG_Login", "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
String className = this.getClass().getName();
if (!(className == "LoginActivity")) {
Intent intent = new Intent(getBaseContext(), LoginActivity.class);
// intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
}
Log.d("LOG_Login", "onAuthStateChanged:signed_out");
}
// ...
}
};
mAuth.addAuthStateListener(mAuthListener);
您的
FirebaseAuth
代码是从哪个活动运行的?如果是在LoginActivity中,则无需担心启动此活动,而是可以清除UI,例如登录字段(用户名/密码)。正在LoginActivity OnCreate中调用FirebaseAuth。但用户可以从其他活动注销。如果他们这样做了,我想将他们发送回登录屏幕。当状态更改为“已注销”时,注释出意图会导致用户保留在其当前屏幕上我认为我只需添加此AuthListener一次,还是需要为每个活动重复此AuthListener?您的FirebaseAuth
代码是从哪个activity
运行的?如果是在LoginActivity中,则无需担心启动此活动,而是可以清除UI,例如登录字段(用户名/密码)。正在LoginActivity OnCreate中调用FirebaseAuth。但用户可以从其他活动注销。如果他们这样做了,我想将他们发送回登录屏幕。当状态更改为“已注销”时,注释出意图会导致用户保留在当前屏幕上我认为我只需添加此AuthListener一次,还是需要为每个活动重复它?