@zhivulinal
Junior (ученик - лузер)

React + Apollo + Websocket. Не обновляется хедер с токеном в WS. Как лечить?

Собираю фронт на вебсокете.
Передаю заголовки с токенами, если при первой загрузке то все норм.
Если перезагрузить страницу, токен тоже валидный.
Если POST, GET тоже все уходит.
Не работает, старое значение токена если его обновить без перезагрузки.
Как лечить? Что делаю не так?

Код такой:
const wsLink = new WebSocketLink({
    uri: `ws://localhost:3000/api`,
    options: {
        reconnect: true,
        connectionParams: {
            Authorization: `Bearer ${token}`,
        },
    }
});

const httpLink = createHttpLink({
    uri: 'http://localhost:3000/api',
    credentials: 'same-origin',
})

const link = split(
    ({ query }) => {
        const { kind, operation } = getMainDefinition(query);
        return kind === 'OperationDefinition' && operation === 'subscription';
    },

    wsLink,
    httpLink,
);

const authMiddleware = new ApolloLink((operation, forward) => {
    operation.setContext(({ headers = {} }) => ({
        headers: {
            ...headers,
            Authorization: `Bearer ${token}`,
        }
    }));

    return forward(operation);
})

const client = new ApolloClient({
    link: authMiddleware.concat(link),
    cache: new InMemoryCache(),
});
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы