GraphQL清除会话cookie结果,无法在将标头发送到客户端后设置标头

问题描述 投票:0回答:1

[我试图弄清楚如何通过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);
          });
    });

谢谢。

graphql apollo-server express-session
1个回答
0
投票

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

后端解析器

    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);
      });
    })),

前端

  logout = async () => {
    await this.props.logout();

    window.location = '/login';
  };
© www.soinside.com 2019 - 2024. All rights reserved.