在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中的会话已经过期,他们必须刷新页面。聊天是web门户的一部分。如果quickblox需要2-3秒来创建新的会话令牌,然后连接到聊天,这是很好的。到那时,我可以显示一个加载器或一些消息。
我在没有QB.chat.disconnect()的情况下尝试了一下,但是它不起作用,并给我发来了Unprocessable entity 422错误。
发布于 2020-07-20 22:26:35
我也有同样的问题,我在QuickBlox文档中找到了一些解决方案
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);https://stackoverflow.com/questions/41431102
复制相似问题