使用nodejs、express、express session、cors和;cookie解析器,用于与使用axios发送http请求的react应用程序通信,并将mariadb用于数据库。
在localhost(3000前端,3001后端)上使用这两种方法都可以很好地工作,会话被正确保存并可以检索/使用(我只传递用户数据)。
在本地网络或aws的EC2实例上部署后端时,req。会话仅返回应用程序中“cookies”上设置的参数。在登录上设置后调用时使用(session({})。
应用程序。js公司:
const express = require('express');
const cors = require('cors');
const session = require('express-session');
const pool = require('./config/database');
const cookieParser = require('cookie-parser');
const app = express();
app.use(express.json());
app.use(cors(
{
credentials: true,
origin: true,
}
));
app.set('trust proxy', 1)
app.use(cookieParser());
app.use(session({
secret: 'cat on keyboard',
saveUninitialized: false,
resave: false,
cookie: { httpOnly: false, maxAge: 1000 * 60 * 60 * 24 }
}));
请求。会话集
getAccountIdByEmail: async (req, res) => {
// connect & retrieve user from credentials //
req.session.logged_user = user[0][0];
return res.status(200).json({ success: user[0][0] })
};
来自react应用程序的axios调用:
const fetchData = () => {
if (adress.charAt(0) == '/') {
adress = endpoint + adress;
}
axios({
method: method,
url: adress,
data: content,
withCredentials: true
})
.then((res) => {
setResponse(res.data);
})
.catch((err) => {
setError(err);
})
.finally(() => {
setloading(false);
});
};
起初我认为它来自Aws EC2上的Nginx,但它直接在实例的3001端口上进行相同的调用,然后我在本地网络上遇到了同样的问题。
我也尝试过使用存储(express session mariadb存储或express mysql会话),但没有成功。
我认为这可能与cors或headers有关,但无法确定什么不起作用。