Tag: connect mongo

即使MongoStore使用connect-mongo,Express会话也不会持久

当我重新启动我的服务器,我的会话结束,我注销。 这不会在常规页面刷新上发生。 我正在使用connect-mongo来解决这个问题: var session = require('express-session'); const MongoStore = require('connect-mongo')(session); 以下是我用来存储会话的代码,重用了一个名为thisDb的现有Mongo连接: app.use(session({ secret: secretHash, saveUninitialized: true, resave: true, secure: false, store: new MongoStore({ db: thisDb }) })); 在成功login期间: var day = 60000*60*24; req.session.expires = new Date(Date.now() + (30*day)); req.session.cookie.maxAge = (30*day); 在我的Mongo shell中,我可以validation在login时是否创build了新的会话: db.sessions.find() {"cookie":{"originalMaxAge":2592000000,"expires":"2017-11-17T20:36:12.777Z","httpOnly":true,"path":"/"},"user":{"newNotifications":false,"username":"max","admin":"true","moderator":"true"},"expires":"2017-11-17T20:36:10.556Z"}

在快速应用程序之间共享会话(connect-mongodb)

所以我的最终目标是让多个节点应用程序连接到同一个数据库并在用户之间共享会话。 所以,如果你从一个应用程序注销,它会将你从所有的应用程序中注销,login也一样。所以这是在我的开发环境中工作。 我有两个节点快速应用程序连接到同一个Mongo会话数据库,所以我可以login到一个应用程序,另一个自动识别会话并login。我已经推送到我们的活CentOS服务器,并使用PM2和Nginx为它服务。 它目前正在为每个应用程序创build一个新的会话条目。 这两个应用程序使用相同的数据库会话和用户。 我可以在实时会话数据库中看到每个应用程序都有一个单独的会话。 因此,我必须立即login到每个应用程序,而不是一个。 这与Nginx有关,因为这在本地是有效的。 注意:我正在使用connect-mongodb会话 这是我的每个快速应用程序中的main.js文件(除端口#外都相同): var MongoDBStore = require('connect-mongodb-session')(express.session); var configDB = require('./config/database.js'); var env = require('./config/env.js'); if(env.location == 'test'){ var store = new MongoDBStore({ uri: configDB.sessions_url, collection: 'sess' }); }else if(env.location == 'live'){ var store = new MongoDBStore({ uri: configDB.sessions_url_live, collection: 'sess' }); } // Catch errors store.on('error', function(error) […]

使用connect-mongo时处理数据库错误

我有一个相当标准的连接mongo设置 在此之前,mongoose被初始化/连接 app.use(express.session({ secret: "sfdgsdgsdfg", store: new MongoSessionStore({db: mongoose.connection.db}) })); 这工作正常。 但是 – 假设我的mongodb连接突然死掉(在下面的例子中本地停止mongod) – 下一次我尝试点击一个路由时,我的快速应用崩溃了 – 错误:无法连接到[localhost:27017]。 (/Users/alex/Projects/MyProject/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:540:74)at emit(events.js:106:17)at null。 (/Users/alex/Projects/MyProject/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:140:15)在发射(events.js:98:17)在Socket。 (/Users/alex/Projects/MyProject/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:478:10)在Socket.mit(events.js:95:17)在net.js: 440:14在process._tickCallback(node.js:419:13) 有没有办法来处理这个错误,(例如)redirect到/错误路线? (很显然,不需要会话!) 编辑 所以现在,我正在创build一个单独的mongoose连接。 然后我使用on('error'来听错误 …这是我卡住的地方 – 进程仍然死亡,因为重新抛出的错误不会传递到明确的error handling程序… var sessionDbConnection = mongoose.createConnection(config.sessionDb); sessionDbConnection.on('error', function(err) { console.log('oops'); throw err; //instead of re-throwing the error, i think i need to pass it […]

login到一个快速应用程序会破坏其他(相同的服务器)会话

我有两个独立的Express 4.x应用程序在同一台服务器上运行(不同的端口),共享一个MongoDB实例。 他们都使用不同的数据库,并有不同的会话秘密。 我可以单独login到应用程序A或B,而不会出现问题。 我的会议得到保持,一切都很好。 但是,如果我login到A然后login到B,则A中的会话被销毁(反之亦然)。 这两个应用程序具有几乎相同的本地身份validation 他们的serializeUser和deserializeUser是非常原始的(跟随Passport docs几乎到tee)。 看来,当login到A然后B, req.session.passport被销毁,导致req.user不正确序列化应用程序A和会话被认为是无效的。 我开始认为它与两个应用程序在同一台计算机(因此是域)上运行的事实不同,只有端口不同。

Connect-mongo语法错误:意外的标记=>

嗨,我有以下错误 node_modules/connect-mongo/src/index.js:29 unserialize: options.unserialize || (x => x), ^^ 我有这些版本: node@v3.3.1 express@4.14.0 mongoose@4.6.5 mongodb@2.2.11

快速会话和令牌在一个项目中

我需要express-session和jwt的解释。 例如,我有购物车,并login和login我使用jwt,但存储在购物车中select的产品我想使用express-session和connect-mongo是正确的方法吗? 我的问题是在一个项目中使用会话和jwt的正确和合理的解决scheme? 也许更好的是使用jwt来存储产品,例如3小时。

通过_id转换错误手动删除connect-mongo会话

我正尝试从connect-mongo会话集合中手动删除一个文档。 当我尝试删除文档时出现以下错误: 消息:“投射到ObjectId失败值”gl9-V-bjAjqv2Nwdf9vHPLN_Fnnl4Thz“path”_id“ 快速会话使用以下函数来生成会话ID: function generateSessionId(sess) { return uid(24); } 从这个函数生成的会话正在进入会话文档的_id属性。 但是,当您尝试通过生成的标识查找或删除文档时,您会收到错误消息。 mongodb文档说_id应该是 ObjectId是一个12字节的BSONtypes的ObjectId 我已经尝试使用会话中的genid选项覆盖会话ID,但覆盖不会将其放入数据库中。 我怎样才能得到一个有效的_id到文档上或用无效的_id查询文档? 谢谢! 我的基础架构 :Express 4.10,Node v0.12.7,Compose.io,connect-mongo,express-session

配对帆,护照和mongo:错误:挂钩(`会议`)加载失败! 对象…没有方法“分配”

我是Sails / Node.js的新手,请耐心等待:) 我试图设置Sails 0.11.3通过Passport与谷歌身份validation。 它工作得很好(谷歌身份validation工作),直到我试图启用mongo会话存储。 一旦我添加到config / session.js中: adapter: 'mongo', host: 'localhost', port: 27017, db: 'xxxx', //REAL_DB_NAME_HERE collection: 'sessions', 帆升降机拒绝启动服务器: $ sails lift info: Starting app… error: A hook (`session`) failed to load! error: Could not load Connect session adapter :: connect-mongo Error from adapter: TypeError: Object function lodash(value) { // exit early if […]

Mongoose – 通过findOne()search模式失败

在通过MongoDB设置一个sessionStore来进行express-session ,我使用findOne()函数来validation用户的信息是否有效和最近有点麻烦。 var session = require('express-session'); var mongoStore = require('connect-mongo')(session); var mongoose = require('mongoose'); var Schema = mongoose.Schema; var Session = mongoose.model('session', new Schema({ sid : String, username : String, email : String })); … 诀窍是, express-session和connect-mongo负责pipe理对数据库的写操作。 app.use(session({ secret: 'secretsquirrel', resave: true, saveUninitialized: true, store: new mongoStore({ mongoseConnection: mongoose.connection, host: '127.0.0.1', port: '27017', db: 'testdb', […]

connect-mongo每秒创build一个新的会话

我有我的nodejs应用程序托pipe在Openshift上。 这是我的规格: 节点v0.10.35,expressionv3.4.8 我的package.json依赖关系: "dependencies": { "angular-loading-bar": "^0.9.0", "async": "^2.0.0-rc.5", "bcrypt-nodejs": "0.0.3", "body-parser": "~1.0.0", "connect-flash": "^0.1.1", "connect-mongo": "^1.2.0", "cookie-parser": "~1.0.0", "ejs": "^2.4.1", "express": "~3.4.4", "lodash": "^4.12.0", "method-override": "~1.0.0", "mongodb": "~2.x", "mongoose": "~4.4.12", "morgan": "~1.0.0", "nodemailer": "^2.3.2", "passport": "^0.3.2", "passport-local": "^1.0.0", "recaptcha2": "^1.0.8" }, 这里是我的server.js #!/bin/env node var express = require('express'); var fs = require('fs'); var […]