Обновление URI экземпляра клиента Apollo - PullRequest
0 голосов
/ 30 июня 2018

Я использую Angular Apollo для одного из наших проектов. Я создаю клиент apollo как:

this.apollo.create({
  link: this.httpLink.create({ uri: `${environment.apiBase}/graphql?access_token=${this.tokenService.token}`}),
  cache: new InMemoryCache()
 })

Поскольку у нашего URI есть токен доступа, срок действия которого также истекает через определенный момент времени, нам пришлось обновить его и получить новый токен доступа, следовательно, новый URI.

Мне не удалось найти в apollo docs какой-либо метод, касающийся способа обновления URI (может быть, я пропустил его?), Также, если я создаю новый экземпляр, такой, он выдает ошибку, что клиент apollo уже нет.

Есть ли способ обновить uri?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Я знаю, что это не часть документации Apollo Angular (PR приветствуется!), Но я описал это в README apollo-angular-link-http.

Есть два способа:

Используйте ссылку Apollo для перехвата запроса и установите свойство uri в контексте

const authMiddleware = setContext((operation, { uri }) => {
  return refreshToken().then(res => ({
    uri: this.getURI()
  })
}))

Или перехватить запрос с помощью перехватчика Angtt HttpClient и изменить конечную точку.

Ссылка на пакет

0 голосов
/ 14 сентября 2018

Манзур, как работает процесс истечения токена?

Другая идея заключается в отправке токена доступа через заголовок вместо строки запроса. Это облегчит отправку токена доступа. Если это возможно, и если вы используете какую-либо конечную точку для обновления токена, вы можете использовать что-то вроде этого:

const httpLink = new HttpLink({
  uri: `${environment.apiBase}/graphql`
})

const authMiddleware = setContext((operation, { headers }) => {
  return refreshToken().then(res => ({
    headers: {
      ...headers,
      access_token: res.access_token
    }
  })
}))

const client = new ApolloClient({
  link: from([authMiddleware, httpLink]),
  cache: new InMemoryCache()
})

ref: https://www.apollographql.com/docs/angular/recipes/authentication.html#Header

...