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 says tokenAboutToExpire 事件在您的访问令牌距离到期约 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的主要内容,如果未能解决你的问题,请参考以下文章

FTP登陆 出现] 连接被关闭;传输已放弃

电脑远程访问服务器关闭是啥意思?

Twilio 客户端电话会议 Android 的参与者数量 [关闭]

起凡游戏登录的时候提示服务器已经关闭!你的主机中的软件中止了一个已建立的连接。是啥原因啊?

vultr服务器可以ping通但是ssh无法连接问题

主队列中添加的同步操作(dispatch_sync)永远不会被执行,会死锁原因