Результаты очистки cookie сеанса GraphQL не позволяют установить заголовки после их отправки клиенту - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь выяснить, как очистить клиентский файл cookie сеанса httpOnly:true только для чтения через graphql. Я успешно загрузил session.destroy cookie в магазине Redis, однако, 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 голосов
/ 11 октября 2019

Наконец-то решена эта проблема :) Мутация выхода из системы должна быть обещанием, которое будет выполнено во внешнем интерфейсе, чтобы предотвратить невозможность установить заголовки при выполнении 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);
      });
    })),

Front-end

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

    window.location = '/login';
  };
...