Клиент Apollo и аутентификация Hasura на iOS
Я пытаюсь реализовать подписку с помощью клиента apollo на iOS, и я изучил эту тему, но она не работает для меня. Я все еще получаю это Authentication hook unauthorized this request, code: 1000
или же Operation couldn't be completed Starscream.WSError error 1
Мой код:
let apollo: ApolloClient = {
let authPayload = ["X-Hasura-Access-Key": "<my_key>",
"Content-Type": "application/json"]
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = authPayload
let map: GraphQLMap = authPayload
let url = URL(string: "https://url")!
let wsUrl = URL(string: "wss://url")!
let httpNetworkTransport = HTTPNetworkTransport(url: url, configuration: configuration)
let wsNetworkTransport = WebSocketTransport(request: URLRequest(url: wsUrl), connectingPayload: map)
return ApolloClient(networkTransport: SplitNetworkTransport(httpNetworkTransport: httpNetworkTransport,
webSocketNetworkTransport: wsNetworkTransport))
}()
Хотя он отлично работает с запросами, но не с веб-сокетом и подписками. Что я делаю неправильно?
UPD: это интересно, но если я удалю полезную нагрузку в wsNetworkTransport, ошибка останется прежней. Также, если я добавлю заголовки запроса вручную через request.addValue
, ошибка опять та же.
Я звоню клиенту так:
apollo.subscribe(subscription: OrdersSubscription(id: "123")) { (result, error) in
error == nil ? print(result!) : print(error!)
}
Есть ли какие-то дополнительные настройки, которые я пропускаю? Эта вещь действительно не хватает документов.
1 ответ
Этот фрагмент кода должен работать:
let authPayloads = [
"X-Hasura-Access-Key": "<key>"
]
let map: GraphQLMap = ["headers": authPayloads]
let websocket = WebSocketTransport(request: urlRequest, connectingPayload: map)
Карта полезных нагрузок должна быть структурирована немного по-другому.