首页 > 解决方案 > 如何通过 GraphQL 将响应标头转发给客户端

问题描述

我在使用 GraphQL 时遇到问题,其中响应标头在返回客户端时被丢弃。我的应用程序使用 NodeJS、Passport.js 和 Express Cookie-Session 来管理身份验证和会话。

我有一个现有的/login路由,它通过 Passport 进行身份验证并将user{}对象和set-cookie标头返回给客户端。结果,在客户端的浏览器上创建了一个 cookie,并建立了他们的会话。

现在,我们最近添加了 GraphQL,我创建了一个login查询,它调用现有/login路由并使用user{}对象进行响应。但是,当 GraphQL 将响应返回给客户端时,不再包含响应​​标头,因此永远不会创建 cookie。

如何通过 GraphQL 转发原始响应标头以到达客户端?

这是 GraphQL 登录的示例:

login { 
  type: typeLogin,
  args : { 'username/password here' },
  async resolve(_, args, context) {
    const response = await fetch('/login', {
      credentials: 'include',
      method: 'POST',
      body: JSON.stringify('username/password here')
   })

   const data = await response.json();

   // console.log(response.headers) will display correct headers

   return data; // User is returned but response headers are not
   }
 }

标签: node.jsgraphqlpassport.js

解决方案


这就是我已经这样做的方式,

链接:https ://github.com/masmerino13/graphql-backend/blob/master/src/resolvers/Mutations/UserMutation.js#L31

让我知道这是否适合您

问候!


推荐阅读