GraphQL清除会话Cookie结果后,无法将标头发送给客户端

时间:2019-10-10 10:43:36

标签: graphql apollo-server express-session

我试图弄清楚如何通过graphql清除httpOnly:true客户端只读会话cookie。我在Redis商店中成功使用session.destroy cookie,但是,res.clearCookie似乎有冲突导致Cannot set headers after they are sent to the client


    logout: requiresAuth.createResolver(
      async (parent, args, { req, res }) => {
          return req.session.destroy((err) => {
              if (err) reject(err);

              res.clearCookie(SESS_NAME);
              resolve(true);
          });
    });

谢谢。

1 个答案:

答案 0 :(得分:0)

最终解决了这个问题:)注销突变必须是一个承诺,它将在前端执行,以防止执行clearCookie时无法设置标头。

后端解析器

operator void*()

前端

    logout: requiresAuth.createResolver((parent, args, { session, res }) => new Promise((resolve, reject) => {
      session.destroy((err) => {
        if (err) reject(err);

        res.clearCookie(config.sess.name);

        resolve(true);
      });
    })),