Печенье установлено в Dev, но не в Prod - PullRequest
0 голосов
/ 23 февраля 2019

Мой сервер graphql / apollo имеет следующую мутацию:

  async signup(parent, args, ctx, info) {
    args.email = args.email.toLowerCase();
    const password = await bcrypt.hash(args.password, 10);
    const user = await ctx.db.mutation.createUser(
      {
        data: {
          ...args,
          password,
          permissions: { set: ["USER"] }
        }
      },
      info
    );

    const token = jwt.sign({ userId: user.id }, process.env.APP_SECRET);

    ctx.response.cookie("token", token, {
      httpOnly: true,
      maxAge: 1000 * 60 * 60 * 24 * 365 // 1 year cookie
    });

    return user;
  },

Во время локальной разработки файл cookie устанавливается, как только новый пользователь регистрируется.Это поможет сразу зарегистрировать нового пользователя.Однако после отправки в Now & Heroku пользователь создается в БД, но cookie никогда не устанавливается.

Я не уверен, с чего начать отладку, так как на сервере prod нет консольного вывода.

Пожалуйста, дайте мне знать, что еще добавить в это, и я буду редактировать.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вот для всех, у кого был светлый момент, как у меня.В разных браузерах была одна настройка, которая эффективно препятствовала установке cookie.

Настройка Chrome называется

Block third-party cookies
Prevent third-party websites from saving and reading cookie data.

Удивило меня, я не думал об этом раньше, но именно этот параметр мешал моему приложению работать.

0 голосов
/ 26 февраля 2019

У меня также была эта проблема, когда я размещал GraphQL API в другом домене или порте, чем домен моего приложения.Если это так, вам нужно установить параметр domain при установке файла cookie, как показано ниже:

ctx.response.cookie("token", token, {
  httpOnly: true,
  maxAge: 1000 * 60 * 60 * 24 * 365 // 1 year cookie
  domain: 'your-app-domain.com',
});

Надеюсь, это поможет

...