java - 如何覆盖 onBackPressed 以确保注销用户不能通过 "go back"访问 MainActivity,而登录用户不能通过 "go back"访问 SignInActivity?

标签 java android authentication

背景:我有一个 SignInUserActivity 和一个 MainActivity。当用户尚未登录或身份验证 token 过期时,首先向用户呈现 SignInUserActivity。成功登录后,用户将被定向到 MainActivity,或者如果身份验证 token 在打开应用程序时有效,则用户将在用户打开应用程序时定向到 MainActivity。用户可以从 MainActivity 注销,这会将用户引导回 SignInUserActivity。

1) 用户从 SignInUserActivity 登录。当用户在 SignInUserActivity 中按下 onBackPressed 时,应用程序应该关闭(或移至后台)>

2) 用户登录后,用户不应通过 onBackPressed 足够多次或工具栏上的 navigateUp 按钮返回 SignInUserActivity,onBackPressed 应仅关闭应用程序(或将其移至后台)。目前,我有

@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

在我的 MainActivity 中

3) 如果用户从 MainActivity 注销,在 SignInUserActivity 中,onBackPressed 不应将用户引导回 MainActivity(由于 session 已被删除,因此数据为空)。目前我处理它的方式是将用户重定向回 SignInUserActivity:

public void handleRedirect(String sessionId) {
    if (sessionId == null) {
        Intent requireSignInIntent = new Intent(this, SignInUserActivity.class);
        startActivity(requireSignInIntent);
    }
}

但它应该覆盖 onBackPressed?

最佳答案

看来您的问题可以通过启动一个新的 Activity 堆栈轻松解决。只需在启动 SignInActivity 以及在成功登录后导航到其他 Activity 时添加此内容

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

这个标志应该涵盖你的第一个和第二个问题。至于第三个问题,看起来你的逻辑很好,但我不太明白最后一部分。

关于java - 如何覆盖 onBackPressed 以确保注销用户不能通过 "go back"访问 MainActivity,而登录用户不能通过 "go back"访问 SignInActivity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48413263/

相关文章:

android - 在 Android 应用程序中打开的浏览器中填写字段

java - 获取 Firebase 电话身份验证 OTP 时出错

java - jaxb:意外元素(uri :"",本地 :"head")- 没有 "head"元素

Java Bean 条件验证

java - 使用 dbus 调用 java 方法

android - 如何向下滚动网页

java - 如何在 Android 的换行符处切断(删除)复选框文本?

android - 使用 Android 导航组件的身份验证流程

authentication - 如何在 Meteor 中创建自定义用户身份验证?

java - 按时间间隔测试代码