Cookie не установлен с экспресс-сессией в производстве - PullRequest
0 голосов
/ 17 декабря 2018

Мое приложение разделено между клиентом и сервером.Клиент - это приложение Nextjs на стороне клиента, расположенное на Now.sh, сервер - это его бэкэнд, созданный с помощью Express и размещенный на Heroku, поэтому это домены client-app.now.sh и server-app.herokuapp.com.


Аутентификация

Система аутентификации основана на файлах cookie, и я использую экспресс-сессию для ее достижения.Это моя конфигурация экспресс-сеанса

app.use(
  session({
    store:
      process.env.NODE_ENV === "production"
        ? new RedisStore({
            url: process.env.REDIS_URL
          })
        : new RedisStore({
            host: "localhost",
            port: 6379,
            client
          }),
    name: "sessionID",
    resave: false,
    saveUninitialized: false,
    secret: keys.SESSION,
    unset: "destroy",
    cookie: {
      domain:
        process.env.NODE_ENV === "production"
          ? ".client-app.now.sh"
          : "localhost",
      secure: process.env.NODE_ENV === "production",
      httpOnly: true,
      maxAge: 7 * 24 * 60 * 60 * 1000
    }
  })
);

Cors установлен с пакетом "cors":

app.use(
  cors({
    origin:
      process.env.NODE_ENV === "production"
        ? process.env.CLIENT_URL
        : "http://localhost:3000",
    credentials: true
  })
);

Клиент настроен с Apollo, а для "credentials" в HttpLink установлено "include ".

Проблема в том, что cookie с идентификатором сеанса правильно установлен в разработке, но не в производстве.Может ли это быть связано с тем, что я размещаю клиент и сервер в разных доменах?

1 Ответ

0 голосов
/ 07 мая 2019

После долгих попыток решить эту проблему, я просто нашел решение:

Итак,

app.use(session({
  secret: secret,
  saveUninitialized: false,
  resave: false,
  cookie: { 
    domain: clientDomain,
    secure: true
}
}));

Я удалил все объекты cookie, и это решило мою проблему:

app.use(session({
  secret: secret,
  saveUninitialized: false,
  resave: false
}));

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

...