gpt4 book ai didi

javascript - req.session undefined 和 req.session.user_id 不工作

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:51 24 4
gpt4 key购买 nike

我正在使用 Express 和 Node 通过 https 进行 session 管理。我想使用 express 创建一个 session ,以便在重定向到公用文件夹中的静态文件之前进行身份验证和 session 。以前我有一个问题 Trouble using express.session with https但是通过在 express.session 中将路径包含为/public 解决了这个问题,但现在我的 req.session 显示为未定义但在浏览器中存在 connect.sid cookie

app.js 是:

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

客户端:

<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>

问题console.log(req.session); 给出了未定义,所以 req.session.user_id = 'xyz'; 也不起作用,出现错误 'TypeError: Cannot set property 'user_id' of undefined at/opt/expressjs/app.js:59:24 at callbacks'。我已经经历了很多问题,但无法弄清楚。

我的网站是静态的,所有 *.html 都位于公共(public)目录中

最佳答案

session 中间件检查传入请求是否与 cookie 路径匹配;如果不是,它不会继续(并且 req.session 甚至不会被创建)。在您的情况下,您的 cookie 路径设置为 /public/,这与请求路径 /login 不匹配。

我认为您希望将 session 中间件 cookie 配置为使用 / 作为路径:

app.use(express.session({
cookie: {
path : '/',
httpOnly: false,
maxAge : 24*60*60*1000
},
secret: '1234567890QWERT'
}));

关于javascript - req.session undefined 和 req.session.user_id 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com