Twilio Sync触发TOKEN_EXPIRED服务器断开连接如何解决
Twilio Sync Token过期导致连接断开的解决方案
问题根因
你现有代码的核心错误是tokenAboutToExpire事件触发时,你传入updateToken方法的是localStorage中存储的已经即将过期的旧token,没有重新向后端申请新的有效token,因此刷新操作完全无效,最终服务端还是会因为token过期主动断开连接。
修复步骤
- 触发token即将过期事件时,不要读取本地缓存的旧token,必须重新请求
/dashboard/token接口获取后端新生成的有效token - 拿到新token后再调用
syncClient.updateToken方法完成刷新,同时更新localStorage中的token缓存 - 可额外监听
tokenExpired事件做兜底兼容,避免因网络波动等问题导致tokenAboutToExpire事件未正常触发时连接直接断开
修正后的代码示例
$.getJSON("/dashboard/token", function (response) { console.log(`Token Generated at ${new Date()}`); localStorage.setItem('syncToken', response.token); syncClient = new Twilio.Sync.Client(response.token, { logLevel: "info" }); // token即将过期事件处理 syncClient.on('tokenAboutToExpire', function () { console.log(`tokenAboutToExpire at: ${new Date()}`); // 重新向后端请求新token $.getJSON("/dashboard/token", function (newResponse) { const newToken = newResponse.token; localStorage.setItem('syncToken', newToken); syncClient.updateToken(newToken); console.log(`Token refreshed at ${new Date()}`); }); }); // 可选:token已过期兜底处理 syncClient.on('tokenExpired', function() { console.log(`tokenExpired at: ${new Date()}`); $.getJSON("/dashboard/token", function (newResponse) { const newToken = newResponse.token; localStorage.setItem('syncToken', newToken); // 过期后如果连接已经断开,优先调用updateToken尝试重连 syncClient.updateToken(newToken).then(() => { console.log('Connection restored after token expiry'); }).catch(() => { // 更新失败的话重新初始化客户端 syncClient = new Twilio.Sync.Client(newToken, { logLevel: "info" }); }); }); }); });
补充说明
你配置的token有效期172800秒(即48小时)是后端生成token时绑定的过期时间,本地存储的token到期后就会完全失效,无法重复用于刷新操作,必须重新向后端申请新签发的token。
内容的提问来源于stack exchange,提问作者Ghulam Shahbaz
相关产品推荐
相关产品推荐

