firebase 访问令牌将在 4 到 5 小时后过期

Posted

技术标签:

【中文标题】firebase 访问令牌将在 4 到 5 小时后过期【英文标题】:firebase access token expire in 4 to 5 hours 【发布时间】:2017-08-16 11:15:02 【问题描述】:

我正在制作一个聊天应用程序,并使用 firebase 电话授权和 quickblox 聊天 api。

我的代码是:

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) 
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() 

                @Override
                public void onComplete(@NonNull Task<AuthResult> task) 
                    if (task.isSuccessful()) 
                        // Sign in success, update UI with the signed-in user's information
                        Log.d("test", "signInWithCredential:success");
                        FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();

                        mUser.getToken(false).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() 
                            @Override
                            public void onComplete(@NonNull Task<GetTokenResult> task) 
                                if(task.isSuccessful())
                                    String m=task.getResult().getToken();
                                    signIn(m);
                                
                            
                        );


 public void signIn(String token)
       QBUsers.signInUsingFirebase(projectId, token).performAsync( new QBEntityCallback<QBUser>() 
        @Override
        public void onSuccess(QBUser user, Bundle args) 

            messenger.com.nowchat.helper.DataHolder.getInstance().setSignInQbUser(user);
            Intent intent = new Intent(Registration.this, WelcomeProfile.class);
            startActivity(intent);
             finish();
        

但问题是我的令牌会在 4 到 5 小时后过期。当我清除缓存或重新安装应用程序时,它会再次运行 5 小时。

【问题讨论】:

过期没关系。你对此有什么问题?您必须在每个启动应用程序左右更新它 【参考方案1】:

您可以使用 QBSessionListener 来监听 QBSession 状态。因此,在回调 onProviderSessionExpired(String provider) 中,您可以获得当前的 firebase 令牌并更新 QBSession。在代码中它看起来像这样:

@Override
public void onProviderSessionExpired(String provider) 
    if (!QBProvider.FIREBASE_PHONE.equals(provider))
        return;
    

    final String projectId = "your.project.id";

    FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
        mUser.getToken(true)
                .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() 
                    public void onComplete(@NonNull Task<GetTokenResult> task) 
                        if (task.isSuccessful()) 
                            String authToken = task.getResult().getToken();
                            QBUsers.signInUsingFirebase(projectId, authToken).performAsync(new QBEntityCallback<QBUser>() 
                                @Override
                                public void onSuccess(QBUser qbUser, Bundle bundle) 
                                    qbUser.setPassword(QBSessionManager.getInstance().getToken());
                                    QBChatService.getInstance().login(qbUser, new QBEntityCallback() 
                                        @Override
                                        public void onSuccess(Object o, Bundle bundle) 
                                            //your actions after success login to the chat
                                        

                                        @Override
                                        public void onError(QBResponseException e) 

                                        
                                    );
                                

                                @Override
                                public void onError(QBResponseException e) 

                                
                            );
                         else 
                            // Handle error -> task.getException();
                        
                    
                );

【讨论】:

谢谢 ....第一次 logintochat 时它工作正常,但几个小时后显示身份验证失败用户 ID 或密码错误的错误...嗯,我正在使用 qbsession 令牌作为密码......我知道 qbsession 令牌也会在几个小时后过期......所以我的问题会在痴迷令牌过期时回调它 @premjangir 我更新了我的答案,以显示续订 QBsession 后如何登录聊天 我也写了同样的代码,但是几个小时后 qbsession 令牌过期了......只有登录触发一个错误......如何处理这个 在回调 onProviderSessionExpired 中更新会话后是否出现错误?您可以从两点组织登录聊天的代码:1-成功登录到 REST 后,2-回调 onProviderSessionExpired。在这两种方式中,您都可以获得当前令牌作为 QBSessionManager.getInstance().getToken()。 否...现在 onProvideSessionExpired 工作正常...当用户已经登录应用程序并在几个小时后再次启动应用程序时,聊天登录会触发用户 ID 或密码 ID 为的错误错了……【参考方案2】:

过期也没关系

据我了解,onVerificationCompleted 回调将在两种情况下触发:

    首次登录(通过短信确认) 令牌更新

https://firebase.google.com/docs/auth/android/phone-auth#verification-callbacks

所以你必须一直听它,如果它是更新的 - 然后再次调用 QuickBlox 登录

【讨论】:

以上是关于firebase 访问令牌将在 4 到 5 小时后过期的主要内容,如果未能解决你的问题,请参考以下文章

1 小时后身份验证令牌无效 - Firebase 中的磁盘持久性

Firebase 令牌在 1 小时内过期后如何保留用户?

使用 Firebase 身份验证进行身份验证后检索 Google 访问令牌

自动进行Facebook页面访问令牌生成

React Firebase 防止 axios 中的令牌过期

firebase 访问令牌是不是会自动刷新?