node example cookieparser cookie javascript node.js session cookies express

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'' }));