【问题标题】:Twilio Sync: connection closed by server, reason is TOKEN_EXPIREDTwilio Sync:连接被服务器关闭,原因是 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 上解决这个问题?

【问题讨论】:

    标签: javascript c# jquery twilio twilio-programmable-voice


    【解决方案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 小时。在此处的文档中查看如何设置 ttltwilio.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);
            });
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      相关资源
      最近更新 更多