#node.js #reactjs #mern #express-session
#node.js #reactjs #мерн #экспресс-сессия
Вопрос:
Могу ли я, пожалуйста, получить некоторую помощь, я искал это по всему Интернету и, похоже, не могу найти ответ, который я ищу.
Поэтому я хотел бы реализовать expression-session и MongoDB в качестве хранилища, поэтому создание сеанса мне удалось сделать, а также сохранить сеанс в хранилище, т.е. MongoDB удалось это сделать.
Проблема теперь возникает, когда мне нужно отправить файл cookie сеанса клиенту, поэтому у меня есть мой сервер (NodeJS), работающий на порту 5000, и у меня есть клиент (ReactJS), работающий на порту 3000, так что теперь, как я могу отправить этот файл cookie клиенту и пометить его как файл cookie HttpOnly?
Вот как я попытался настроить экспресс-сессию
mongoose
.connect(MongoURI, {
useNewUrlParser: true,
useCreateIndex: true
})
.then(() => console.log("MongoDB connected..."))
.catch((err) => console.log(err));
const mongoDBstore = new MongoDBStore({
uri: MongoURI,
collection: "mySessions"
});
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
app.use(
session({
name: COOKIE_NAME,
secret: 'SESS_SECRET',
resave: true,
saveUninitialized: false,
store: mongoDBstore,
cookie: {
maxAge: 1000 * 60 * 60 * 3,
sameSite: false,
secure: false
}
})
);
Именно здесь я хотел отправить файл cookie после входа пользователя в систему
router.post("/login", (req, res) => {
const { email, password } = req.body;
if (!email || !password) {
return res.status(400).json({ msg: "Please enter all fields" });
}
User.findOne({ email }).then((user) => {
if (!user) return res.status(400).json({ msg: "User does not exist" });
bcrypt.compare(password, user.password).then((isMatch) => {
if (!isMatch) return res.status(400).json({ msg: "Invalid credentials" });
const sessUser = { id: user.id, name: user.name, email: user.email };
req.session.user = sessUser;
res.json({ msg: " Logged In Successfully", sessUser });
});
});
});
Комментарии:
1. Файлы cookie не зависят от порта, поэтому файл cookie, установленный для запроса на порт 3000, будет отлично работать для запросов от одного и того же клиента к одному и тому же хосту на порту 5000. Если вы не видите отправленный файл cookie, вам нужно посмотреть, как клиент отправляет запрос, и посмотреть, правильно ли он настроен для включения файлов cookie в свои запросы.
2. Если вам нужна дополнительная помощь в настройке cookie, покажите нам фактический код, в который вы хотите отправить cookie обратно, чтобы мы могли посоветовать, как конкретно изменить этот фактический код.
3. @jfriend00 Извините за поздний ответ, у меня возникли проблемы с сетью, но я только что добавил код, в котором я пытался настроить экспресс-сессию, а затем также где я пытался отправить файл cookie с сервера клиенту
4. Итак, ваше промежуточное программное обеспечение сеанса отправит файл cookie сеанса вызывающему клиенту. Пожалуйста, опишите точную последовательность запросов и опишите, где вы не видите cookie.
5. Итак, когда пользователь входит в систему, я успешно создаю сеанс и сохраняю сеанс в MongoDB с помощью библиотеки connect mongo , но затем мне не удается отправить файл cookie сеанса клиенту. Итак, в основном последовательность находится при входе пользователя в систему, я хочу отправить HttpOnly клиенту React