Контекст:
Я просто разделил свое существующее приложение 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
})
}
Подозрения