【问题标题】:Firebase Realtime Database android client detect user logout after one hourFirebase实时数据库android客户端在一小时后检测用户注销
【发布时间】:2020-05-14 08:47:59
【问题描述】:

我在一个使用 java 开发的 Android 项目中使用 Firebase 实时数据库和 Firebase 手机身份验证。

我已经能够通过电话登录成功验证用户身份, 现在我在数据库助手中设置了一些 ValueEventListeners。 然而,大约一小时后(因为 firebase 身份验证令牌过期),我的值甚至监听器回调都没有触发。

我该如何处理这种情况。我想让我的用户保持身份验证,除非他们手动注销。

public void refreshUserAuthToken(){
        try {
            FirebaseUser thisUser = FirebaseAuth.getInstance().getCurrentUser();
            thisUser.getIdToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                @Override
                public void onComplete(@NonNull Task<GetTokenResult> task) {
                    if (task.isSuccessful()){
                        // nothing
                        // the task is succesful
                    }
                    else {
                        startActivity(new Intent(getApplicationContext(), LoginActivity.class));
                    }
                }
            })
        }
        catch (Exception e){
//            new Intent(MainActivity.class, this)
        }
    }

我应该何时以及如何调用它? 我尝试在登录活动中使用它,但任务总是不成功

我是否应该在每次加载活动时调用此函数?

我还有应用程序与 Web 服务交互,我该如何利用它? 有人可以将我指向一个 git repo 或提供一个代码流来帮助我让我的用户长时间保持登录状态吗?

提前致谢

编辑

我将 getIdToken(true) 更改为 getIdToken(false),这不会导致它总是失败。

这在一定程度上解决了我的目的,但是如果用户将活动/片段打开超过一小时,我仍然不确定如何以及在哪里调用它。

下一个阶段是我的 firebase 实时数据库似乎在内部注销,但是如何传递这个新令牌?

一遍又一遍地调用这个函数,如果令牌超时,肯定会把我带到登录页面,但是我怎样才能让firebase回调保持登录状态?

【问题讨论】:

    标签: android firebase firebase-authentication


    【解决方案1】:

    但是大约一小时后(因为 firebase 身份验证令牌过期),我的值甚至侦听器回调都没有触发。

    这是完全可以预料的。 ID 令牌持续一个小时(出于安全原因),然后 Firebase Auth SDK 将刷新它。您将需要使用该新令牌并在以后的请求中使用它。

    您可以通过使用提供的 API 监听更改来了解令牌何时刷新。您将需要使用addIdTokenListener() 注册一个IdTokenListener,只要有更新就会被调用。例如:

    FirebaseAuth.getInstance().addIdTokenListener(new FirebaseAuth.IdTokenListener listener() {
        public void onIdTokenChanged (FirebaseAuth auth) {
            // get the new token
            auth.getCurrentUser().getIdToken(false).addOnCompleteListener // and so on...
        }
    });
    

    当你不再需要监听器时,一定要移除它。

    【讨论】:

    • 在我的情况下,我需要一直听,不是吗?因为我希望我的客户觉得他们总是在登录
    • 由您决定何时开始和停止收听。
    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2021-08-10
    • 2016-12-11
    • 2020-12-19
    相关资源
    最近更新 更多