Как изменить контекст apollo в следующем. js? - PullRequest
0 голосов
/ 02 марта 2020

Я посмотрел на пример api-rout-apollo-server-and-client-auth и не уверен, как мне изменить контекст как по ssr, так и по клиентскому запросу.

Я хочу, чтобы для каждого распознавателя graphql (использующего api) был доступ к объекту ctx.user с предварительно обработанным токеном JWT. Но где я должен его проанализировать?

Если я проанализирую его здесь:

const apolloServer = new ApolloServer({
  schema,
  context(ctx) {
    ctx.user = '123'
    return ctx
  }
})

export default apolloServer.createHandler({ path: '/api/graphql' })

Тогда ctx.user будет неопределенным по запросу SSR, работая только по запросу клиента.

1 Ответ

0 голосов
/ 04 марта 2020

У вас может быть что-то вроде этого:

// server
const apolloServer = new ApolloServer({
  schema,
  context: async () => {
    const jwt = req.headers.authorization
    const user = await getUserFromJwt(jwt)
    return {
      user,
    }
  }
})

// client
const link = createHttpLink({ uri: 'http://localhost...' })
const authLink = setContext((_, { headers }) => {
  return {
    headers: {
      ...headers,
      authorization: jwt,
    },
  }
})    

const apolloClient = new ApolloClient({
  link: authLink.concat(link),
  ...
})

Проверьте следующие документы: клиент и сервер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...