Cook ie не устанавливается в браузере - CORS / проблема с портом - PullRequest
0 голосов
/ 10 февраля 2020

Контекст:

Я просто разделил свое существующее приложение Next.js / Express, используя Lerna, отделяя сервер Next. js (обслуживающий интерфейс на localhost:3000) и мой express сервер (обслуживающий API на localhost:4000). В результате мне пришлось создать экземпляр axios со значением по умолчанию {baseUrl: localhost:4000}, поэтому мои вызовы относительного пути будут продолжать работать (ie. axios.post('/api/auth/login', {...})). Это все работало раньше, когда сервер обслуживал и API, и приложение Next js.

Проблема :

После этого переключения мой поток аутентификации no дольше работает исправно. После входа в систему как обычно, страница refre sh удалит любую память пользовательского сеанса. Насколько я могу судить, Cook ie не устанавливается. Я не вижу его в своих инструментах разработчика, и когда приложение выполняет последующий вызов, файлы cookie отсутствуют.

Когда мое приложение монтируется, оно вызывает api/me, чтобы проверить, вошел ли пользователь в систему. в. Если они есть, он ответит с информацией о пользователе, чтобы гидрировать приложение с информацией о пользователях. Если они не, это не будет делать ничего особенного. Этот запрос к /api/me больше не содержит постоянного повара ie, установленного при входе в систему. (dev-tools показывает заголовок Set-Cookie, возвращаемый, как и ожидалось, из исходного запроса на вход)

Возможно Полезная информация:

  • В зависимости от того, как я запускаюсь мое приложение, (отладка в VSCode против выполнения обеих yarn dev команд в терминале), я получу ошибку CORS. Я использую пакет cors без конфигурации: app.use(cors())
  • Звонок на /api/me при монтировании приложения выглядит следующим образом:
// API.js

`export default axios.create({baseURL: 'http://localhost:4000'})`

// app.js
import API from 'API'
API({
      method: 'get',
      url: '/api/me'
    })
      .then(r => {
        //...
      })
  • Я настраиваю повара ie с помощью этой функции
function setCookie(res, token, overwrite, sameSite = true) {
  res.cookie(cookieName, token, {
    httpOnly: true,
    sameSite: sameSite,
    secure: process.env.NODE_ENV === 'production',
    expires: new Date(Date.now() + cookieExpiration),
    overwrite: !!overwrite
  })
}

Подозрения

...