我尝试使用带有connect-redis的快速会话来存储用户会话。目前,在用户登录后,我返回req.sessionID
,然后每当用户想要向api的安全部分发出请求时,他/她必须提供会话ID。然后,身份验证中间件返回到redis并检查会话是否存在,如果存在,则将当前会话替换为存储在Redis中的会话。
function isLoggedIn(req, res, next){
var session_id = req.body.session_id;
if (!session_id){
res.send(401, {status: 0, message: "Not authorized"});
return;
}
console.log(req);
sessionStore.get(session_id, function(err, session){
if(err){
res.send(401, {status: 0, message: "Not authorized"});
return;
}
req.session = session;
req.sessionID = req.body.session_id;
return next();
});
}
但出于某种原因,这个错误出现了:
/node_modules/express-session/index.js:269
req.session.touch();
^
TypeError: Object #<Object> has no method 'touch'
我似乎无法在网上找到有此错误的其他人,因为touch()是表达会话的内置功能。请帮忙?我的快速会话版本是1.9.3。
答案 0 :(得分:9)
我遇到了同样的错误。似乎如果您来自快速cookie会话,则可以设置req.session = {/* some arbitrary session object */}
。显然,req.session
在表达需求的实例上有一些方法。
因此,请确保您未在代码中的任何位置明确覆盖req.session
。
答案 1 :(得分:1)
试试这个:
req.session.user = { 'id': 123 };
req.session.pageviews = 1; // This too
字体:https://davidburgos.blog/expressjs-session-error-req-session-touch-not-function/
答案 2 :(得分:0)
在使用cookie-session中间件之前,我能够通过使用cookie-parser中间件解决此问题:
TextBox1.Text = Now.ToString()
在Express 4上测试