Почему мои файлы cookie не устанавливаются во внешнем интерфейсе моего приложения с использованием express -session и nodejs? - PullRequest
1 голос
/ 27 мая 2020

Я программирую со стеком MERN, и я наткнулся на кирпичную стену при использовании express -сессии. Кажется, я не могу установить файлы cookie, когда мой интерфейс localhost:3000 достигает конечных точек в моем бэкэнде localhost:8080. Файлы cookie устанавливаются отлично, когда я нахожусь на localhost:8080 и достигаю конечной точки в моем бэкэнде localhost:8080. Как я могу решить эту проблему? Я хочу, чтобы реакция могла установить httpOnly cook ie, когда я регистрирую своего пользователя, или регенерировать cook ie, когда я вхожу в систему, или уничтожать сеанс, когда я выхожу из системы. et c ... Я не совсем уверен, что это проблема cors, с которой я имею дело. Замечу, что эти файлы cookie устанавливаются, потому что я их тестировал. проблема в том, что я не вижу файлы cookie, устанавливаемые из моего интерфейса.

const express = require('express');
const path = require('path');
const mongoose = require('mongoose');
const session = require('express-session')
const cors = require('cors')

const MongoStore = require("connect-mongo")(session)
const PORT = process.env.PORT || 8080;
const config = require('config')

const server = express();

server.set('trust proxy', 1);
server.use(express.json());
server.use(express.urlencoded({ extended: true }))
server.use(cors({
  origin: "http://localhost:3000",
  optionsSuccessStatus: 200,
  credentials: true
}))

server.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization, Set-Cookie");
  res.header("Access-Control-Allow-Methods", "POST, GET, HEAD, DELETE, PUT, OPTIONS");
  res.header("Access-Control-Allow-Credentials", "true")
  if ('OPTIONS' == req.method) {
    res.sendStatus(200);
  }
  else {
    next();
  }
});

mongoose.connect(process.env.MONGODB_URI || config.get("mongo_db_key"),
  {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false
  })
  .then(() => console.log("MongoDB Connected"))
  .catch((err) => console.log(err))

server.use(session({
  secret: 'keyboard cat',
  resave: false ,
  saveUninitialized: false,
  cookie: {
    secure: false,
    maxAge: 1000 * 60 * 60 * 24,
  },
  store: new MongoStore({
    mongooseConnection: mongoose.connection
  })
}))

const auth = require('./routes/API/auth');

server.use('/account', auth);

server.listen(PORT, () => console.log(`listening on port: ${PORT}`));

1 Ответ

0 голосов
/ 27 мая 2020

Вы не можете установить повар ie для разных доменов (включая протокол, домен), за исключением того, что вы можете установить повар ie для домена более высокого уровня, который совместно используется поддоменами (например, Domain=mozilla.org тогда developer.mozilla.org получит повар ie). Что касается файлов cookie, поддерживающих сеанс пользователя, они почти всегда устанавливаются сервером, а не клиентом (доступ к файлам cookie сеанса на стороне клиента должен быть ограничен из соображений безопасности).

В большинстве случаев c В соответствии с шаблоном у вас будет только один внутренний сервер, который будет обслуживать ваше приложение для реагирования, а также обеспечивать базовую часть для простоты.

...