GraphQL Apollo iOS 客户端响应标头

Kap*_*l G 5 ios apollo graphql swift3

我正在使用 Apollo iOS 客户端进行 GraphQL 查询。我需要在标头中传递身份验证令牌,我可以使用下面的代码来实现 -

let apolloAuth: ApolloClient = {
            let configuration = URLSessionConfiguration.default
            let token = "Bearer \(UserDefaults.standard.string(forKey: "UserToken") ?? "")"
            // Add additional headers as needed
            configuration.httpAdditionalHeaders = ["Authorization": token]

            let url = URL(string: "...URL.../graphql")!

            return ApolloClient(networkTransport: HTTPNetworkTransport(url: url, configuration: configuration))
        }()
Run Code Online (Sandbox Code Playgroud)

我的获取查询如下 -

apolloAuth.fetch(query: referralQuery){ (result, error) in

        if let error = error {
            print(error.localizedDescription)
            return
        }else{
            self.referralId = result?.data?.referrals?.id
        }

    }
Run Code Online (Sandbox Code Playgroud)

现在,我的服务器在每个请求后返回刷新的身份验证令牌,这是响应标头的一部分。我需要从响应标头获取令牌,但我无法找到方法来做到这一点。有人可以指导我吗?

Huy*_*ang 3

URLSessionConfiguration对象带有一个共享的HTTPCookieStorage单例对象。使用该配置设置 apollo 客户端后,您可以使用服务器将身份验证令牌存储在 cookie 中,然后在每次请求时将 cookie 发送到客户端。您将能够自动访问该 cookie,如下所示:

apollo.fetch(query: GraphQLQuery()) { result, error in
        if let error = error { fatalError(error.localizedDescription) }
        if let data = result?.data {
          // do something with data
        }
        self.getCookies()
      }

func getCookies() {
    let cookies = HTTPCookieStorage.shared.cookies
    if let c = cookies {
      print(c)
      // if your server sent a token inside a cookie, you will see it here
    }
  }
Run Code Online (Sandbox Code Playgroud)