Могу ли я получить данные "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.