Twilio Sync:连接被服务器关闭,原因是 TOKEN_EXPIRED
Posted
技术标签:
【中文标题】Twilio Sync:连接被服务器关闭,原因是 TOKEN_EXPIRED【英文标题】:Twilio Sync: connection closed by server, reason is TOKEN_EXPIRED 【发布时间】:2021-11-30 04:59:14 【问题描述】:Twilio 同步超时为 172800
$.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" );
syncClient.on('tokenAboutToExpire', function ()
console.log(`tokenAboutToExpire at: $new Date()`);
var token = localStorage.getItem('syncToken');
syncClient.updateToken(token);
);
);
这是显示的 Twilio Sync 浏览器控制台:
Twilsock I: socket opened
twilio-sync.js:25304 Twilsock I: refreshing all registrations
twilio-sync.js:25304 Twilsock I: update registration for context 8c430fb3-4353-4b06-9cfd-6bebc78582b0
但是一段时间后,浏览器中会出现此消息:
Twilsock I: connection has expired
Notify I: Transport ready false
Twilsock I: connection closed by server, reason is TOKEN_EXPIRED
Twilsock I: socket closed CloseEvent
谁能告诉我如何在 Twilio Sync Event 上解决这个问题?
【问题讨论】:
【参考方案1】:这里是 Twilio 开发者宣传员。
您在那里收到的事件是令牌即将过期,但是您正在用它自己替换令牌。相反,您应该从后端请求一个新令牌并使用该新令牌更新客户端。
$.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" );
syncClient.on('tokenAboutToExpire', function ()
console.log(`tokenAboutToExpire at: $new Date()`);
$.getJSON("/dashboard/token", function (response)
syncClient.updateToken(response.token);
);
);
);
【讨论】:
那么,告诉我这个“tokenAboutToExpire”事件何时在 twilio.sync.js 文件中触发 作为the documentation saystokenAboutToExpire
事件在您的访问令牌距离到期约 3 分钟后触发。这应该给你足够的时间来获取一个新的令牌并更新它。
我可以更改 Twilio 同步对象的超时时间吗?
当您谈论 Twilio 同步对象时不确定您的意思,因为我一直在讨论访问令牌。不过,您可以更改访问令牌的超时时间,默认情况下为 1 小时(3600 秒),最长可达 24 小时。在此处的文档中查看如何设置 ttl
:twilio.com/docs/iam/access-tokens#step-2-generate-token
它仍然会过期令牌和另一件事,TokenAbouttoExpire 事件在 JWT 令牌过期前三分钟未命中。【参考方案2】:
谢谢,我尝试了所有活动,所以我明白了......
syncClient.on('connectionStateChanged', (newState) =>
console.log('Received a new connection state:', newState);
if (newState === 'disconnecting')
$.getJSON("/dashboard/token", function (response)
var token = response.token;
syncClient.updateToken(token);
);
);
【讨论】:
以上是关于Twilio Sync:连接被服务器关闭,原因是 TOKEN_EXPIRED的主要内容,如果未能解决你的问题,请参考以下文章
Twilio 客户端电话会议 Android 的参与者数量 [关闭]