#reactjs #express #cookies #cors #express-session
Вопрос:
У меня есть экспресс-серверный API, который я надеюсь использовать для аутентификации, который использует connect-mongodb-session для хранилища экспресс-сеансов. Однако каждый раз, когда я вхожу в систему, он создает новый сеанс, а не использует уже существующий. Я провел некоторое исследование, и все сказали, чтобы я просто включил учетные данные в свой запрос, что я уже делаю.
Вот некоторые из бэкэнда:
var corsOptions = {
origin: `http://localhost:3000`,
credentials: true
}
app.use(cors(corsOptions))
И вот некоторые из интерфейсов:
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(formData),
credentials: 'include' as RequestCredentials,
mode: 'cors' as RequestMode,
}
let response = await fetch('http://localhost:8000/register', requestOptions)
Как вы можете видеть, я установил credentials: 'include'
, и все же он по-прежнему создает новую сессию при каждом входе в систему.
Кроме того, не следует задавать два вопроса в одном, но интерфейс написан на React, и я сохраняю регистрационную информацию с помощью Redux. Это приводит к тому, что мое приложение выходит из системы при перезагрузке, есть ли какой-либо возможный способ справиться с этим, например, войти в систему с помощью файлов cookie или сохранить хранилище Redux?
Ответ №1:
Я изменил опцию cookie экспресс-сеанса на secure: false
, и это, похоже, исправило ее. Странно, так как он был установлен в значение true в первую очередь после того, как кто-то сказал, что исправлена та же проблема.
app.use(
session({
secret: process.env.secret,
resave: false,
saveUninitialized: false,
cookie: { secure: false },
store: store,
})
)
Ответ №2:
добавьте это промежуточное программное обеспечение поверх промежуточного программного обеспечения сеанса, потому что браузер отправляет метод опции перед методом публикации используйте это, чтобы игнорировать метод опции
app.use(function (req, res, next) {
if (req.method == "OPTIONS") {
res.send();
res.end();
} else {
next();
}
});