Заголовок аутентификации не устанавливается после входа в систему - PullRequest
0 голосов
/ 26 сентября 2019

Я использую Apollo-Angular для настройки связи с моей конечной точкой GraphQL.Я использую JWT с заголовком авторизации, чтобы перейти к моей конечной точке.Проблема, с которой я сталкиваюсь, заключается в том, что при первом входе в систему устанавливается мой файл cookie auth_token, но он не передается в моей ссылке Apollo.Если я обновлю страницу, то все будет нормально, но я не могу понять, почему она не прошла после входа в систему.Он действует так, как будто заголовки ссылок настраиваются только при инициализации приложения до того, как я вошел в систему, и нет файла cookie auth_token, и он просто устанавливает пустую строку Авторизационного канала в заголовке, а затем использует ее только после того, как файл cookie присутствует,Я добавил Http Interceptor для регистрации запроса и проверил, что токен не добавляется, хотя я вижу, что cookie был установлен в браузере.

Вот мой graphql.module, где я настраивалАполлон ссылка.Есть идеи, что я делаю не так?

@NgModule({
  exports: [ApolloModule, HttpLinkModule],
})
export class GraphQLModule {
  constructor(
    apollo: Apollo,
    private cookieService: CookieService,
    httpLink: HttpLink
  ) {
    const headers = new HttpHeaders().set('Authorization', `Bearer ${cookieService.get('auth_token')}` || null);

  // Create an http link:
  const http = httpLink.create({
    uri: 'http://localhost:8080/v1/graphql',
    headers
  });

  // Create a WebSocket link:
  const ws = new WebSocketLink({
    uri: 'ws://localhost:8080/v1/graphql',
    options: {
      reconnect: true,
      connectionParams: {
        headers: { Authorization: `Bearer ${cookieService.get('auth_token')}` || null }
      }
    }
  });


  // Split links based on operation type
  const link = split(
    ({ query }) => {
      const definition = getMainDefinition(query);
      return definition.kind === 'OperationDefinition' && definition.operation === 'subscription';
    },
    ws,
    http,
  );

  apollo.create({
    link: ApolloLink.from([
      link
    ]),
    cache: new InMemoryCache()
  });
}
...