Как отправить экспресс-сессию клиенту не по тому же URL?

#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