代码之家  ›  专栏  ›  技术社区  ›  Max Kraev

iOS上的Apollo客户端和Hasura身份验证

  •  1
  • Max Kraev  · 技术社区  · 7 年前

    我正在尝试在iOS上使用apollo客户端实现一个订阅,我已经研究了 this 但对我不起作用。我还在听呢 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 回复  |  直到 7 年前
        1
  •  2
  •   iamnat    7 年前

    此代码段应该可以工作:

    let authPayloads = [
      "X-Hasura-Access-Key": "<key>"
    ]
    let map: GraphQLMap = ["headers": authPayloads]
    let websocket = WebSocketTransport(request: urlRequest, connectingPayload: map)
    

    推荐文章