Могу ли я получить данные "req.session" (экспресс-сессия)?

app.get("/route1", async (req, res) => {
  res.header('Access-Control-Allow-Origin', '*');
  console.log('TCL: req.session', req.session);
  res.send(req.session);
});

app.get("/route2", (req, res) => {
  req.session.test = "test";
  console.log('TCL: req.session', req.session);
  res.send(req.session);
});

route2 устанавливает данные сеанса, мой терминал / браузер регистрирует их просто отлично. Если я захожу на route1 в строке URL браузера, данные успешно отображаются как в браузере, так и в терминале.

Если я пытаюсь получить route2 в реагирующем компоненте, я не получаю данные, которые я сохранил в req.session.test, и мой терминал регистрирует только часть cookie, например:

TCL: req.session Session {
  cookie:
   { path: '/',
     _expires: null,
     originalMaxAge: null,
     httpOnly: false,
     secure: false } }

конфигурации:

app.use(session({
    secret: prodkeys.sessionSecret,
    resave: false,
    saveUninitialized: false,
    cookie: {
        httpOnly: false,
        secure: false,
      }
}));

в компоненте:

const isSession = await axios.get("http://localhost:5001/route1",
   {credentials: 'include', proxy: true});

3 ответа

Я не на 100% какая часть исправила это, но я установил cors и настроил мою выборку таким образом, и это решило это:

const isSession = await axios.get("http://localhost:5001/route1",
    {credentials: 'include', proxy: true, withCredentials: true});

index.js:

app.use(cors({
    origin: ['*'],
    methods: ['GET','POST'],
    credentials: true // enable set cookie
}));

Попробуйте использовать withCredentials: true вместо credentials: 'include'Я не могу найти учетные данные в официальном документе.

Пожалуйста подтвердите. Вы должны настроить экспресс в следующем порядке:

app.use(express.cookieParser());
app.use(express.session({ secret: sessionVal }));
app.use(app.route);
It may solve your problem.
Другие вопросы по тегам