Server side authentication with cookies
See original GitHub issueI store an authentication token (JWT) in a cookie. I’m trying to access this server side by creating an AuthLink that I compose with HttpLink, which is then passed to the withData HOC. The problem is that in my AuthLink component, I don’t seem to have access to the request so that I can set cookies so that the graphql request made in getDataFromTree is properly authenticated.
I’ve looked at other approaches that are similar to next-apollo and they all pass in the ctx from getInitialProps into the function that initializes the ApolloClient. For example:
// example `withApollo` HOC that passes `ctx` (albeit indirectly through `getToken`)
// that can be accessed in an AuthLink component to access the request cookies
static async getInitialProps(context) {
const { Component, router, ctx } = context;
const apolloClient = await initApollo(
{},
{
getToken: () => nextCookies(ctx).token,
},
);
When using the withData HOC, it doesn’t appear that the request context is made available to the ApolloClient init function, so I’m unable to access and set the cookies in the server side graphql request:
// withData.js
WithApollo.getInitialProps = async ctx => {
const { AppTree } = ctx
let pageProps = {}
if (PageComponent.getInitialProps) {
pageProps = await PageComponent.getInitialProps(ctx)
}
// Run all GraphQL queries in the component tree
// and extract the resulting data
const apolloClient = initApolloClient(apolloConfig, null) // <-- ctx not passed in
I feel like I’m missing something obvious. How do I make an authenticated server side graphql request with next-apollo? Is there a way to get the current request so that I can get the cookies server side?
Issue Analytics
- State:
- Created 4 years ago
- Reactions:2
- Comments:9 (4 by maintainers)

Top Related StackOverflow Question
Hey @jimwheaton - glad you got that sorted. I’ll make sure to update the lib to support this.
@mikeruddy I just published
v4.0.0with a fix. Check out the README or this example for the latest configuration instructions.