首页 > 解决方案 > Apollo 客户端订阅中的过期令牌

问题描述

我在 http 链接中有有效的订阅和正确的令牌,但我从 ws 链接的最后一个会话中获得了陈旧的令牌。当我控制台记录connectionParams处理程序时,它只会在页面刷新时执行,所以难怪我会得到陈旧的令牌。我认为它应该在每个 websocket 事务上执行。我的服务器代码没问题,我解析令牌没有问题。我从本地存储中读取令牌的方式与为 http 链接读取令牌的方式相同。客户端的完整代码可以在这里找到

这是我的 websockets 链接:

const wsLink = new WebSocketLink({
  uri: `ws://localhost:8000/graphql`,
  options: {
    reconnect: true,
    lazy: true,
    inactivityTimeout: 1000,
    connectionParams: () => {
      const token = localStorage.getItem('token');
      // this console log gets executed
      // only on page refresh
      console.log('token ws', token);
      return {
        headers: {
          'x-token': token ? token : '',
        },
      };
    },
  },
});

标签: javascriptwebsocketjwtsubscriptionapollo-client

解决方案


推荐阅读