我有一个简单的NodeJS&当我将React构建部署到NodeJS中时,React Webapp可以正常工作。
当我单击登录时,服务器将检查授权并重定向到另一个页面。当我尝试从React构建(端口3000)运行webapp时,我注意到一旦登录,就会有一个新会话,因此从服务器(端口8080)获取数据将无法工作。
https://github.com/Yanipo5/MenuCreator
NodeJS-登录Api(路由到url即可);
router.post('/',approveUserPassword, function(req, res){
console.log(new Date() + ":" + req.sessionID)
if(req.session.auth){
let url = 'http://localhost:3000/edit-menu';
res.redirect(url);
}
});
function approveUserPassword(req, res, next) {
let email = req.body.email;
let psw = req.body.psw;
let query = "SELECT id FROM Users " +
"WHERE email= '" + email + "' AND " +
"password='" + psw + "'" ;
con.query(query, function (err, result, fields) {
if (err) throw err;
if(result.length > 0){
req.session.auth = true;
req.session.rest_id = result[0].id;
}else{
req.session.auth = false;
}
next();
});
}
-将在端口3000上失败,因为新会话将不会经过身份验证。
componentDidMount(){
let url ='http://localhost:8080/api/menu';
fetch(url, {credentials: 'same-origin' })
.then(response => response.json())
.then(json => {
this.setState({data: json});
console.log(json)
})
}
api/菜单
function checkAuth(req, res, next) {
console.log(new Date() + ":" + req.sessionID)
if(!req.session.auth){
res.json("no auth for menu");
}else{
next()
}
};
router.get('/', checkAuth, function(req, res){
let sql = "SELECT * FROM Menu_Items " +
"WHERE rest_id=" + req.session.rest_id + ";";
con.query(sql, function (err, result, fields) {
if (err){
console.log(sql);
throw err;
}
res.json(result);
});
});
这是会话的NodeJS日志(如您所见,有2个唯一的):
2017年11月13日星期一19:21:59 GMT+0200(IST):6tu0wi3Lt2RNEMD-SZHCzX2vJ0DljtHL
2017年11月13日星期一19:22:00 GMT+0200(IST):JRBGJXS109F3C\U GHR3GGKQLCC5底座