如何处理 Quickblox 会话过期?

Posted

技术标签:

【中文标题】如何处理 Quickblox 会话过期?【英文标题】:How to handle Quickblox session expiration? 【发布时间】:2017-01-02 17:42:31 【问题描述】:

在 quickblox 中,session expires two hours after the last request。所以为了处理这种情况,我使用了代码

config.on.sessionExpired = function(next,retry)
)

并在QB.init中传递了config

config.on.sessionExpired = function(next, retry) 
    console.log("============session renewal")
    var user = self.get('user')
    QB.chat.disconnect()
    QB.createSession( login: user.login, password: user.pass , function(err, res) 
        if (res) 
            // save session token
            token = res.token;
            user.id = res.user_id
            self.get('user').token = token
            QB.chat.connect( userId: user.id, password: user.pass , function(err, roster) 
                // Do something   
            )
        
    )

QB.init(QBApp.appId, QBApp.authKey, QBApp.authSecret, config);

首先断开聊天,然后创建一个新会话,然后重新连接聊天,这是更新会话的正确方法吗?

我不希望客户知道该会话在 quickblox 中已过期并且他们必须刷新页面。聊天是门户网站的一部分。如果 quickblox 需要 2-3 秒来创建一个新的会话令牌然后连接到聊天,那就没问题了。到那时,我可以显示加载程序或一些消息。

我在没有QB.chat.disconnect() 的情况下尝试过,但它不起作用并给我发送了Unprocessable entity 422 错误。

【问题讨论】:

@Daniel 请停止更改括号样式,因为它不会以任何方式改进代码,并且会使问题更长而没有任何收获。这是风格和偏好的问题,不需要编辑。相反,应将问题作为一个整体来关注并解决需要解决的问题。 @Shivam 有两种方法可以处理此问题,首先,您使用 QB.chat.disconnect() 并重新初始化用户,其次是检查会话是否可用,如果会话过期,则必须重新初始化它 【参考方案1】:

我有同样的问题,我在 QuickBlox Docs 找到了一些解决方案

https://docs.quickblox.com/docs/js-authentication#session-expiration

QuickBlox javascript SDK 将自动更新您当前的会话。无需手动调用 createSession() 方法。登录后,会话可用 2 小时。当会话过期时,任何请求方法都会先更新它,然后再执行。

官方文档中的这个例子:

var CONFIG = 
  on: 
    sessionExpired: function(handleResponse, retry) 
      // call handleResponse() if you do not want to process a session expiration,
      // so an error will be returned to origin request
      // handleResponse();

      QB.createSession(function(error, session) 
        retry(session);
      );
    
  
;

QB.init(3477, "ChRnwEJ3WzxH9O4", "AS546kpUQ2tfbvv", config);

【讨论】:

以上是关于如何处理 Quickblox 会话过期?的主要内容,如果未能解决你的问题,请参考以下文章

.Net Reflector 过期如何处理?

面试突击 002 | Redis 是如何处理已过期元素的?

Redis 面试宝典之 Redis 如何处理已经过期的数据?

FBSDK令牌过期情况如何处理?

如何处理 AJAX 请求中的会话超时

6. Redis在内存用完时会怎么办?以及Redis如何处理已过期的数据?