Tag: 会话

Node.js和Express会话处理 – 后退button问题

我的Express应用程序中有一个限制区域“/ dashboard”。 我使用一个非常小的函数来限制访问: app.get('/dashboard', loadUser, function(req, res){ res.render('dashboard', { username: req.session.username }); }); function loadUser(req, res, next){ if (req.session.auth) { next(); } else { res.redirect('/login'); } }; 问题是,当我通过调用注销用户… app.get('/logout', function(req, res){ if (req.session) { req.session.auth = null; res.clearCookie('auth'); req.session.destroy(function() {}); } res.redirect('/login'); }); …会话被杀害, 但当我在浏览器中点击“后退”button时,浏览器的caching中就有了受限制的页面。 这意味着“/仪表板”上没有GET,也没有用户loginvalidation。 我尝试在元(Jade模板)中使用nocaching但它仍然无法正常工作。 meta(http-equiv='Cache-Control', content='no-store, no-cache, must-revalidate') meta(http-equiv='Pragma', content='no-cache') meta(http-equiv='Expires', content='-1') […]

在socket.io中pipe理多个选项卡(但同一用户)

我有一些socket.io的问题,我不知道如何解决它。 我有一个与socket.iologin系统的应用程序来pipe理用户交互。 另外我有一个数组来pipe理所有活动的websocket会话。 这个数组存储一个session.id =>用户名。 当用户使用相同的页面(或使用websocket的不同页面)打开新选项卡时,问题就开始了。 这会在数组中导致重复的用户名input。 {id1, username} {id2, username} 当套接字向用户发送消息时,它只发送给数组的第一个会话ID,所以只有一个选项卡接收消息。 我试图改变新连接的套接字ID以匹配其他,但它不起作用。 socket.id = sessionId of the other websocket; 我认为另一个解决scheme是将信息发送给所有公开会议,但我认为这不是最好的方式。 谢谢。

PassportJS会话混合起来

在ExpressJS应用程序中,当推送到生产服务器时,护照会话随机混合。 随机,即使我没有注销我的会话,该页面也可以加载另一个用户的视图。 如果不做其他事情,另一个更新会使我回到我自己的账户(也是随机的)。 我们的两个Web应用程序发生这种现象,这两个应用程序是由两个单独的用户按照其网站上的Passport指南编码的。 这两个networking应用程序都使用Facebook连接/ API。 这发生在Redis和File会话存储上。 我看到一篇关于使用全局variables的文章 :我们确定只使用本地作用域。 有什么我们做错了? 更新v1 在一个应用程序中,我们为Passport的serialize / deserialize实现了以下内容: passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); 另一方面,我们也试过: passport.serializeUser(function (user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { User .where({id: user.id}) .fetch() .then(function (user) { done(null, user); }, function (err) { done(err, user); }); }); 无论哪种方式,该应用程序仍然有其会议混合起来。 […]

用护照创build用户

我正在使用Node.js并打算使用Passport进行身份validation。 但是,我在网上看到的所有例子都假设用户已经创build好了。 我想知道如何创build一个用户的会话后,他们被保存在数据库(我有这部分工作),以便护照将识别他们。 (我不想保存新用户,然后强制他们去login页面。)

Memory.orem.MemoryStore不返回会话?

设置会话并在php中使用它们非常简单。 但是我的网站需要处理websocket。 我面临着在node.js中设置会话的问题。 我可以轻松地推送数据,而不使用会话,它可以正常工作,但是当打开多个选项卡时,会创build新的socket.id,并且之前打开的选项卡将无法正常工作。 所以我一直在研究会议,并有问题访问会话存储,其logging会话不抓住。 我已经尝试与session.load以及但没有运气 我如何获取会话对象,并以打开其他选项卡不会影响function的方式使用它,并将所有选项卡上的数据从服务器推送到客户端? var express=require('express'); var http = require('http'); var io = require('socket.io'); var cookie = require("cookie"); var connect = require("connect"), MemoryStore = express.session.MemoryStore, sessionStore = new MemoryStore(); var app = express(); app.configure(function () { app.use(express.cookieParser()); app.use(express.session({store: sessionStore , secret: 'secret' , key: 'express.sid'})); app.use(function (req, res) { res.end('<h2>Hello, your session […]

ExpressJS&Websocket&会话共享

我试图做一个基于Node.js的聊天应用程序。 我想强制websocket服务器(ws库)使用ExpressJS会话系统。 不幸的是,我卡住了。 用于获取会话数据的MemoryStore散列与Cookie中的会话ID不同。 有人能解释我做错了什么吗? Websocket服务器代码部分: module.exports = function(server, clients, express, store) { server.on('connection', function(websocket) { var username; function broadcast(msg, from) {…} function handleMessage(msg) {…} express.cookieParser()(websocket.upgradeReq, null, function(err) { var sessionID = websocket.upgradeReq.cookies['sid']; //I see same value in Firebug console.log(sessionID); //Shows all hashes in store //They're shorter than sessionID! Why? for(var i in store.sessions) console.log(i); […]

我应该何时使用cookie分析器与快速会话?

在大多数的ExpressJs例子中,我发现使用cookie-parser和express-session 。 演示示例 如果我可以访问会话数据与req.session.name没有它,在什么情况下(或好处)我应该使用cookie-parser ?

NodeJS + Express – 将会话中间件应用于某些路由

我有一个快速的应用程序与一些路线,只有两个需要支持会议。 我到处读到中间件定义(app.use(express.session({…)仅适用于后面的路由,所以我创build了这个示例: var express = require('express'); var app = express(); app.use(express.bodyParser()); app.get('/path1', function (req, res) { res.send('text response'); }); app.use(express.cookieParser()); app.use(express.session({ secret: 'secret', cookie: { maxAge: new Date(Date.now() + 2 * 60 * 1000) } })); app.get('/path2', function (req, res) { res.session.test = { "test": "test" }; res.send('text response'); }); app.listen(8088); 但是这不起作用:in / path2 res.session是未定义的。 […]

MongoDB:在集合:会话上设置TTL索引时出错

最初这个错误消息开始出现很less,但开始出现更经常,现在出现4/5次我运行我的应用程序。 我正在处理我的会话存储与Mongo,据我所知,TTL索引是用来使会话数据过期。 /home/dan/dev/audio-wave/node_modules/connect-mongo/lib/connect-mongo.js:161 throw new Error('Error setting TTL index on collection : ' + s ^ Error: Error setting TTL index on collection : sessions at /home/dan/dev/audio-wave/node_modules/connect-mongo/lib/connect-mongo.js:161:23 at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1404:28 at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1542:30 at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:159:22 at commandHandler (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:678:48) at Db._executeQueryCommand (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1802:12) at Cursor.nextObject (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:729:13) at Cursor.toArray (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:158:10) at Cursor.toArray (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/scope.js:10:20) at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1541:65 以下是将它们联系在一起的代码 var sessionStore = new […]

护照login和持续会话

背景 我有一个与邮差完全testing的CRUDfunction的平均应用程序。 我一直试图坚持login相当一段时间,没有运气。 我已阅读并尝试以下 护照文件 toon io的博客关于login 快速会议 Scotch io,节点auth变得容易 再加上一些其他的阅读材料(许多SO问题) 但我只能注册和login一个用户,而不是坚持login会话。 我的应用程序 这里是一个链接到完整的github回购(如果你正在寻找最新的变化检查开发分支) 我对authentication/login的理解 这里是我的理解用户login与我的项目代码示例和邮递员结果以及控制台日志的截图。 护照设置 我有以下auth.js文件,它configuration护照 var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; module.exports = function(app, user){ app.use(passport.initialize()); app.use(passport.session()); // passport config passport.use(new LocalStrategy(user.authenticate())); passport.serializeUser(function(user, done) { console.log('serializing user: '); console.log(user); done(null, user._id); }); passport.deserializeUser(function(id, done) { user.findById(id, function(err, user) { console.log('no […]