10sen
February 2, 2022, 3:16pm
1
How can I send the meteor loginToken from @meteorrn to ApolloClient, so I can getUser on the server-side?
const httpLink = createHttpLink({
uri: settings.GRAPHQL_URL,
});
const authLink = setContext((_, { headers }) => {
const token = 'Meteor.loginToken';
return {
headers: {
...headers,
authorization: token ? `Bearer ${token}` : '',
},
};
});
const client = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache(),
});
You can use a Method or AJAX to a WebApp route (Note: The forum mods seems to prefer the user of Methods.)
minhna
February 3, 2022, 1:47pm
3
I create a react context to store those info like token…
export default function App() {
return (
<SafeAreaProvider>
<ApolloAppProvider>
...
</ApolloAppProvider>
</SafeAreaProvider>
);
}
in ApolloAppProvider,
export const ApolloAppProvider = ({ children }) => {
const [token, setToken] = useState(null);
....
const httpAppLink = createHttpLink({
uri: API_URL,
});
const appLinkContext = setContext((_, { headers }) => {
// return the headers to the context so httpLink can read them
return {
headers: {
...headers,
authorization: token ? `${token}` : "",
},
};
});
const appLink = ApolloLink.from([
errorLink,
appLinkContext.concat(httpAppLink),
]);
const client = new ApolloClient({
link: appLink,
...
});
return (
<ApolloAppContext.Provider
value={{ token: token, setToken }}>
<ApolloProvider client={client}>{children}</ApolloProvider>
</ApolloAppContext.Provider>
);
when called login mutation success, I call the setToken
function from ApolloAppContext to set the token. From now Apollo client will send requests to server with token in the header.