如何处理 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 会话过期?的主要内容,如果未能解决你的问题,请参考以下文章