admin管理员组文章数量:1295334
I am using Express and node for the session management with https. I want to create a session using express so that authentication and the session is made before the redirection to the static files in the public folder. Previously i was having a problem Trouble using express.session with https But it was solved by including path in the express.session as /public but now my req.session is showing as undefined but in the browser there is connect.sid cookie present
The app.js is :
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();
});
Client Side :
<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>
The problem is that console.log(req.session);
gives undefined so the req.session.user_id = 'xyz';
also not works and error 'TypeError: Cannot set property 'user_id' of undefined at /opt/expressjs/app.js:59:24 at callbacks'
es.
I have gone through many questions but was not able to figure out.
My website is static and all the *.html locates in the public directory
I am using Express and node for the session management with https. I want to create a session using express so that authentication and the session is made before the redirection to the static files in the public folder. Previously i was having a problem Trouble using express.session with https But it was solved by including path in the express.session as /public but now my req.session is showing as undefined but in the browser there is connect.sid cookie present
The app.js is :
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();
});
Client Side :
<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>
The problem is that console.log(req.session);
gives undefined so the req.session.user_id = 'xyz';
also not works and error 'TypeError: Cannot set property 'user_id' of undefined at /opt/expressjs/app.js:59:24 at callbacks'
es.
I have gone through many questions but was not able to figure out.
My website is static and all the *.html locates in the public directory
Share edited May 23, 2017 at 12:22 CommunityBot 11 silver badge asked Jan 13, 2014 at 14:33 ZeeshanZeeshan 8864 gold badges16 silver badges31 bronze badges1 Answer
Reset to default 6The session middleware checks if an ining request matches the cookie path; if not, it doesn't bother continuing (and req.session
won't even be created). In your situation, your cookie path is set to /public/
, which doesn't match the request path /login
.
I think you'd want to configure the session middleware cookie to use /
as a path:
app.use(express.session({
cookie: {
path : '/',
httpOnly: false,
maxAge : 24*60*60*1000
},
secret: '1234567890QWERT'
}));
本文标签: javascriptreqsession undefined and reqsessionuserid not workingStack Overflow
版权声明:本文标题:javascript - req.session undefined and req.session.user_id not working - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741614568a2388452.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论