Я использую 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()
});
}