Tag: session

Node.js – 在中间件中使用res.redirect

我想在加载所有的页面之前使用authenticateUser()中间件。 (在app.get('/',authenticateUser,function()…))中,我试图在app.use(authenticateUser)之前调用app.use(app.router )。 但是这并没有奏效。 authenticateUser基本上是: if (req.session.loginFailed) { next() else { if (req.session.user_id) { … if (userAuthenticated) { next(); } else { req.session.loginFailed = true; console.log('setting loginFailed to true'); res.redirect('/login'); } } } 然后在app.get('/ login')我设置req.session.loginFailed为false; 这应该工作,但我只想调用它的app.get()或app.post()等我的实际网页之一。 我认为它被许多不同的请求调用(因为在加载一个页面,'设置loginFailed为真'被称为多次) 有一个更好的方法吗? 还是应该在我网站上的每一页之前简单地调用它?

使用express和MongoDB的node.js中的会话生存期

我正在使用node.js和express框架。 作为一个会议商店,我正在使用MongoDB。 如何设置从MongoDB删除会话对象的生命周期。 这是我如何做的声明: app.use(express.cookieParser()); app.use(express.session({ secret: "Stays my secret", store: new MongoStore({ db: 'myDB' }) }));

如何更新由passportjs设置的req.user会话对象?

我试图做很多天,但所有的testing失败… 我的平台上的用户使用passportjs策略(paypal,facebook,google …)连接它们。 当用户连接时,我在标题的右侧写上他的昵称。 头文件的html代码是从handlebars模板生成的,当这个部分由expressjs服务的时候,我把req.user会话对象发送给模板,以便编写昵称和其他信息。 顺便说一下,这工作的很好,但我有一个问题,当用户从他的configuration文件更新他的昵称,我不能更新服务器端的会话对象,如果用户重新加载页面,旧的昵称再次出现。 而且我不想每次用户加载一个页面都要求数据库的用户信息,所以我想保留这个configuration: // — Passport session setup passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); 我的中间件设置当地人: // — Set accessible datas from the template res.locals = _.extend(res.locals, { user: req.user, query: req.url, title: app.config.title, url: app.config.url }); 我失败了: // Trying to update req.user directly : not […]

使用Express和Node,如何在子域/主机头之间维护会话

我有一个节点服务器响应请求,并根据主机头redirect用户。 用法是静态/主页站点位于www,每个用户都有自己的子域(即www.example.com和site.example.com)。 路由是根据site.js。 当用户没有login时,他们被redirect到login。 我发现当用户被redirect到他们的子域时,会话不被维护。 我想这是预期的,但我想知道是否有一种方法来维护两个子域相同的会话。 我希望如果他们login并返回到www.example.com,他们会看到一个不同的视图,其中包括一个链接注销/他们的仪表板,等我现在的解决方法,我想,只是创build会话在他们的子域名,如果他们确实返回到www它就好像他们没有login。 任何人之前处理过这个问题,或者有如何处理会话的答案? 我认为这个问题可能在users.js,因为它不是一个相对path,我redirect到'http://site.example.com'… 这里是相关的代码(用户查找是使用MongoDB完成的,因为它的工作正常,所以我把它放在了外面 – 调用这个服务的行是users.authenticate)… server.js: app.configure -> app.set "views", "#{__dirname}/views" app.set "view engine", "jade" app.use express.bodyParser() app.use express.methodOverride() app.use express.cookieParser() app.use express.session { key: "KEY", secret: "SECRET", store: new MemoryStore(), cookie: { domain: 'example.com', maxAge : 1000*60*60*24*30*12 } } app.use express.static "#{__dirname}/public" app.use express.logger "short" app.use express.favicon […]

Node.js服务器重新启动会丢弃会话

我正在使用快速和连接中间件function齐全的用户注册/身份validation系统。 app.use(express.session({store: require('connect').session.MemoryStore( {reapInterval: 60000 * 10} ) })) 唯一的问题是,每次执行服务器重新启动时会话都会丢失。 https://github.com/remy/nodemon – 并且nodemon每次检测到文件更改时都会重新启动node.js。 我怎样才能持久会议?

使用Express / Redis进行会话存储时,“会话”未定义

我正在尝试在快速应用程序中使用redis进行会话。 我做了以下几点: var express = require('express'); var RedisStore = require('connect-redis')(express); app.configure('development', function(){ app.use(express.session({ secret: "password", store: new RedisStore({ host: "127.0.0.1", port: "6379", db: "mydb" }) })); 后来,在我的应用程序中,如果我做了这样的事情: var whatever = req.session.someProperty; 我得到: 无法读取未定义的属性“someProperty” 这表明req.session是未定义的(我可以从configuration节中的console.log条目中看到这一点) 我肯定有redis运行,并可以看到我的应用程序连接到它最初(使用redis-cli显示器)