timhall / svelte-apollo

Svelte integration for Apollo GraphQL
MIT License
944 stars 68 forks source link

How is it possible to update the client with a new JWT in headers? #126

Open t-lock opened 1 year ago

t-lock commented 1 year ago
<script lang="ts">
  import { ApolloClient, InMemoryCache } from "@apollo/client";
  import { setClient } from "svelte-apollo";

  export let token: string = "";

  const cache = new InMemoryCache();

  const client = new ApolloClient({
    uri: import.meta.env.VITE_HASURA_GQL_URL,
    cache,
    headers: {
      Authorization: `Bearer ${token}`,
    },
  });
  setClient(client);
</script>

<slot />

Passing in an updated token via props does not cause a re-render. Since the whole basis of this library is passing the Client through Context, and Context only being able to be set during component initialization, I do not see how it is possible to update the Client after initialization, such as when a new token is provided through a refresh token operation.

Please advise.

binaryme commented 1 year ago

It should not re-render in order for your request to grab the most recent token.

every time you request a method post to your request URL (your graphql endpoint) you will call it with the most recent token.

did you checked your network tab to verify your request includes your most recent token?