iOS 上的 Apollo 客户端和 Hasura 身份验证
Apollo client & Hasura authentication on iOS
我正在尝试在 iOS 上使用 apollo 客户端实现订阅,我已经查看了 线程,但它对我不起作用。我仍然收到此 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))
}()
尽管它可以很好地处理查询,但不适用于 websocket 和订阅。我做错了什么?
UPD:这很有趣,但如果我删除 wsNetworkTransport 中的负载,错误仍然存在。另外,如果我通过 request.addValue
手动添加请求 headers,错误再次相同。
我这样给客户打电话:
apollo.subscribe(subscription: OrdersSubscription(id: "123")) { (result, error) in
error == nil ? print(result!) : print(error!)
}
我还缺少任何其他设置吗?这玩意真缺文档。
这段代码应该可以工作:
let authPayloads = [
"X-Hasura-Access-Key": "<key>"
]
let map: GraphQLMap = ["headers": authPayloads]
let websocket = WebSocketTransport(request: urlRequest, connectingPayload: map)
有效负载映射的结构需要稍有不同。
我正在尝试在 iOS 上使用 apollo 客户端实现订阅,我已经查看了 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))
}()
尽管它可以很好地处理查询,但不适用于 websocket 和订阅。我做错了什么?
UPD:这很有趣,但如果我删除 wsNetworkTransport 中的负载,错误仍然存在。另外,如果我通过 request.addValue
手动添加请求 headers,错误再次相同。
我这样给客户打电话:
apollo.subscribe(subscription: OrdersSubscription(id: "123")) { (result, error) in
error == nil ? print(result!) : print(error!)
}
我还缺少任何其他设置吗?这玩意真缺文档。
这段代码应该可以工作:
let authPayloads = [
"X-Hasura-Access-Key": "<key>"
]
let map: GraphQLMap = ["headers": authPayloads]
let websocket = WebSocketTransport(request: urlRequest, connectingPayload: map)
有效负载映射的结构需要稍有不同。