javascript - example - req.session undefined y req.session.user_id no funciona
express-session npm (1)
Estoy utilizando Express y nodo para la gestión de sesión con https. Quiero crear una sesión con Express para que la autenticación y la sesión se realicen antes de la redirección a los archivos estáticos en la carpeta pública. Anteriormente estaba teniendo un problema. Problema al utilizar express.session con https. Pero se solucionó al incluir la ruta en express.session como / public, pero ahora mi req.session se muestra como indefinida, pero en el navegador hay una cookie connect.sid presente.
La aplicación.js es:
var express = require(''express'')TypeError: Cannot set property ''user_id'' of undefined at /opt/expressjs/app.js:59:24 at callbacks;
var http = require(''http'');
var https = require(''https'');
var fs = require(''fs'');
var mongo = require(''mongodb'');
var monk = require(''monk'');
var db = monk(''localhost:27017/svgtest1'');
var options = {
key: fs.readFileSync(''privatekey.pem''),
cert: fs.readFileSync(''certificate.pem'')
};
var app = express();
app.use(express.static(__dirname + ''/public''));
app.use(express.urlencoded());
app.use(express.json());
app.use(express.cookieParser());
app.use(express.session({cookie: { path: ''/public/'',httpOnly: false , maxAge: 24*60*60*1000}, secret: ''1234567890QWERT''}));
//middle ware to check auth
function checkAuth(req, res, next) {
if (!req.session.user_id) {
res.send(''You are not authorized to view this page'');
} else {
next();
}
}
app.get(''/'', function(req, res) {
console.log(''First page called'');
res.redirect(''loginform.html'');
console.log(''redirected'');
res.end();
});
app.post(''/login'', function(req, res) {
console.log(''login called'');
var usrfield = req.body.usrfield;
var passfield = req.body.passfield;
console.log(req.session);
// Play with the username and password
if (usrfield == ''kk'' && passfield == ''123'') {
req.session.user_id = ''xyz'';
res.redirect(''svg-edit.html'');
} else {
res.send(''Bad user/pass'');
}
console.log(usrfield);
console.log(passfield);
res.end();
});
Lado del cliente :
<html>
<style media="screen" type="text/css">
@import url("css/loginform_styles.css");
</style>
<head>
<script type="text/javascript" src="annotationTools/js/md5.js" ></script>
<script>
function validateForm()
{
var usrnamefield=document.forms["loginform"]["usrfield"].value;
var passwrdfield=document.forms["loginform"]["passfield"].value;
if ((usrnamefield==null || usrnamefield=="")||(passwrdfield==null || passwrdfield==""))
{
document.getElementById(''valueerrorlayer'').innerHTML =''Username or password field is empty'';
//document.forms["loginform"]["errorshow"].innerHtml = ''username or password empty'';
return false;
}
else return true;
}
</script>
</head>
<body>
<form name="loginform" id="loginform" action="https://localhost:8888/login" method="post" onsubmit="return validateForm()">
<div id = "content" align = "center">
<p align="center"><font size="7">LabelMe Dev</font></p>
<br />
<br />
<label> Please Enter the <b><i>Username</i></b></label>
<br />
<br />
<input type="text" name = "usrfield" id = "usrfield" onkeydown="if (event.keyCode == 13) document.getElementById(''btnSearch'').click()"/>
<br />
<br />
<br />
<label> Please Enter the <b><i>Password</i></b></label>
<br />
<br />
<input type="password" name = "passfield" id = "passfield" onkeydown="if (event.keyCode == 13) document.getElementById(''btnSearch'').click()"/>
<br />
<br />
<br />
<i><p id=''valueerrorlayer'' style="color:red;"> </p></i>
<input type="submit" value="Submit"/>
</div>
</form>
</body>
</html>
El problema es que console.log(req.session);
da indefinido así que req.session.user_id = ''xyz'';
también no funciona y error ''TypeError: Cannot set property ''user_id'' of undefined at /opt/expressjs/app.js:59:24 at callbacks''
viene. He pasado por muchas preguntas pero no fui capaz de descubrirlo.
Mi sitio web es estático y todos los * .html se ubican en el directorio público
El middleware de sesión comprueba si una solicitud entrante coincide con la ruta de la cookie; si no, no molesta continuar (y la req.session
ni siquiera se creará). En su situación, su ruta de cookies se establece en /public/
, que no coincide con la ruta /login
solicitud.
Creo que desearía configurar la cookie de middleware de sesión para usar /
como ruta:
app.use(express.session({
cookie: {
path : ''/'',
httpOnly: false,
maxAge : 24*60*60*1000
},
secret: ''1234567890QWERT''
}));