如何通过GraphQL将响应标头转发到客户端

时间:2018-12-21 16:36:56

标签: node.js graphql passport.js

我在使用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
   }
 }

1 个答案:

答案 0 :(得分:0)

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

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

让我知道这是否对您有用

致谢!