Tag: 会话

会话pipe理,Node + Express和Mongoose模式对象

我正在使用Node.js + Express + Mongoose,并使用Mongoose Schema来存储“会话”数据。 同时,我正在使用“connect-mongodb”进行会话pipe理(本地驱动程序)。 直到今天,我已经意识到我有多余的function。 所以,我试图将我的Schema对象添加到“req.session”。 它似乎工作,但是我在下一个请求中释放了我的Schema对象的Moongosefunction。 我考虑的一个select是存储在'req.session'中的对象的id,然后使用Mongoose来检索它。 我考虑的另一个select是用Mongoose会话pipe理器replace“connect-mongoose”。 你可以帮我做决定,并推荐一个方法。 更具体地说,如果我使用Mongoose解决scheme,是否可以解决与我的Schema对象失去Mongoosefunction的问题? TIA

req.session内容试图访问另一条路线时会消失

我不能使用expressjs会话来了解我的代码有什么问题。 我在路由/login上设置了req.session.is_logged = true ,然后按F5调用路由/session , req.session.is_logged值为false。 这是一些代码 var express = require("express"); var app = express(); app.configure(function(){ app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({secret: 'test', store: express.session.MemoryStore({ reapInterval: 60000 * 10 })})); }); app.get('/session', function(req, res){ if (req.session.is_logged){ console.log('|–>Session recognized'); res.status(200); res.send({ response: "OK" }); }else{ console.log('|–>Any session recognized'); res.status(403); res.send({ response: "KO" }) }; }); app.get('/login', function(req, res){ […]

Socket.IO,导航器选项卡的问题

我正在使用Socket.IO,我发现一个很大的问题。 我试图做一个实时聊天:用户login,select另一个用户连接和交谈,所以(…) var http = require('http'), fs = require('fs'), path = require('path'), io, server; var PORT = 3000, HOST = '127.0.0.1'; server = http.createServer( function ( request, response ) { var filePath = '.' + request.url, extName, contentType; if (filePath == './') { filePath = './index.html'; } extName = path.extname(filePath); contentType = 'text/html'; switch ( […]

如何创build会话express.js

我运行本地主机:3000 /名称/约翰,创build一个cookie,然后本地主机:3000 /名称显示cookie我有一个控制台错误“TypeError:无法读取未定义的属性'名称' 看我的代码 var express = require('express') , http = require('http') , path = require('path') ; var app = express(); app.configure(function(){ app.set('port', process.env.PORT || 3000); app.use(express.bodyParser()) ; app.use(express.methodOverride()) ; app.use(app.router); app.use(express.cookieParser()); app.use(express.session({ secret: 'secret'})); }) ; app.get('/name/:name', function(req, res){ res.cookie('name' , req.params.name).send('<p>the cookie <a href="/name">Go here</a></p>') ; }); app.get('/name', function(req, res){ console.log(req.cookies.name); res.send("index"); }); […]

Passport.js – 在会话中存储信息

我目前有一个mongoose/快递/ passportjs应用程序,我可以成功login和退出。 但是,只有用户标识存储在会话中。 我希望商店的整个用户对象。 这是我使用的代码: passport.serializeUser(function(user, done) { done(null, user._id); }); passport.deserializeUser(function(_id, done) { done(null, { _id: _id }); }); 伟大的作品,这就是为什么我试图序列化整个用户: passport.serializeUser(function(user, done) { done(null, user._id); }); passport.deserializeUser(function(user, done) { done(null, user); }); 但是,它不存储任何会话。 我究竟做错了什么?

表示authentication中间件在PUT请求后无法正确redirect

我正在使用下面的中间件passportjs。 假设用户在请求某些事情时是否login。 如果他没有login,他应该被redirect到login页面。 我有一个请求路由如下: app.put('/fantasyteams/:fantasyTeamId', auth.requiresLogin, fantasyteams.update); 当用户尝试更新网站中名为“幻想团队”的资源时,将会调用此路线 auth.requiresLogin是一个中间件,如下所示: exports.requiresLogin = function (req, res, next) { if (req.isAuthenticated()) { return next() } return res.redirect("/signin"); }; login我的用户后,我通过删除会话cookie来模拟会话过期。 此后,我通过网站做了一个PUT'/ fantasyteams / 123'的更新幻想团队号码123。 fantasyteams.update只是一个mongodb / mongoose保存操作: exports.update = function(req, res){ var fantasyteam = req.fantasyteam; fantasyteam = _.extend(fantasyteam, req.body); fantasyteam.save(function(err){ res.jsonp(fantasyteam); }); }; 正如所料,上面的路由处理程序(app.put …)抓住了请求,将它传递给auth.requiresLogin中间件来检查用户是否login。因此,事实certificate,用户没有login,因为我删除他的会话cookie。 按预期调用res.redirect。 但是,该网站不会redirect到login页面。 我在node.js命令日志中看到了这一点: PUT […]

Express.JS:注销而不破坏会话

我有一个Express.js应用程序,我想保留用户所有会话的日志。 这在实现注销function时造成了一些麻烦。 接受的做法是使用session.destroy但我不想这样做,因为它从数据库中删除会话。 是否有可能在不破坏会话的情况下过期?

express.js不在nodeunittesting中保存会话数据

更新底部! 我的node.js服务器使用express.js来pipe理会话。 login后,我将一些用户信息存储在req.session中。 我有一个注销端点,它只是在发送响应之前从req.session删除用户数据。 随着用户的每个请求,我使用authentication中间件来确保会话中仍然存在用户数据,因此删除会话对象中的用户数据将会导致后续authentication失败。 为了testing我的服务器,我有一个nodeunittestinglogin,调用几个端点,注销,然后尝试调用另一个端点。 我希望最后的端点在validation失败,因为我以前吹走了用户数据。 相反,当我最后一次打电话时,我的用户数据仍然存在 。 就好像删除它的注销电话没有被写回到会话存储中一样。 这是我的app.js: app.use(express.cookieParser('secretPassword')); app.use(express.cookieSession({key: 'someKey'})); … app.get('/logout', accounts.logout); app.get('/account', auth.authenticateSession, accounts.show); auth.js: exports.authenticateSession = function(req, res, next) { if (!req.session.user) { return res.json(401, { error: 'Access denied. You must be logged in to make this request.' }); } … } accounts.js:退出: exports.logout = function(req, res) { […]

在数据标题中不显示cookieSession密钥

我试图解决在socket.io中访问会话variables的臭名昭着的问题。 我基本上已经阅读过谷歌关于这个话题的每一个链接,而且我还在挣扎。 毕竟我的路由我有这个: io.set('authorization', function(data,accept) { data.cookie = cookie.parse(data.headers.cookie); —> console.log(data.cookie); data.sessionID = connect.utils.parseSignedCookie(data.cookie['express.sid'].split('.')[0].substring(2), conf.sessionSecret); sessionStore.get(data.sessionID, function (err, session) { console.log(session); }); }); 不幸的是,我画了一个箭头的console.log返回: { 'connect.sid': 's:3pIi31DPthO8KVOjqzYpeL75.nHvKOpMZsUsyto7CtBJgcJZIiBSN+IC2/aD0GcfYftU' } 所以当然,我得到一个关于express.sid未定义的错误。 当我更改express.sid connect.sid时,我的会话variables未定义。 我真的很努力地解决这个问题 – 我已经在这里待了几个小时。 任何帮助? 编辑:总结我解决的问题: 在app.config中,我使用cookieSession而不是会话 我的客户端连接到我的服务器的端口转发的外部ip版本。 这不包含cookie数据。 .split('。')[0] .substring(2)在查找sessionID时是绝对必要的 在io.set('authorization,function(handshake,callback)…必须调用“callback(null,true)”)的结尾,以便socket.io连接正常进行

节点Js会话pipe理演示

任何人都可以告诉我如何在Node Js中创build会话variables以及如何浏览它。 其实我正在使用Node Js和Express exports.setSession=function(req,res){ req.session.user = 'demo'; //console.log("adding to session " + JSON.stringify(user)); console.log("SessionS-"+req.session.user); }; exports.get_session = function(req, res){ console.log("SessionFun-"+req.session.user); }; 我这样做,但会话variables中获取未定义的值 Output: SessionS-demo SessionFun-undefined