Tag: 会话

是否有可能在Express中使特定用户的会话数据无效或删除?

好的,所以对于我的高级devise项目,我正在和一个Node.JS / Express应用程序的团队一起工作,参加SGA学生志愿者项目。 我们正在Express中使用MongoDB进行持久性会话存储。 当用户login时,他们的文档被复制到他们的会话存储中。 任何时候用户数据都被修改,它被写入MongoDB数据库。 如果数据库更新成功,用户会话将更新为数据库中的新文档。 每次请求用户数据时,都会从会话存储中读取数据。 只要会话每次在数据库中成功修改用户数据时都保持更新,就可以工作。 它还使我们避免每次使用某些用户数据渲染视图时都必须从数据库读取数据。 我们有不同types的用户。 我们有学生volunteer型用户,不同级别的staff型用户。 我不认为我们的会话/数据库组合会有问题,直到我的合作伙伴实现了顶级stafftypes用户的function。 他们有能力修改学生volunteer用户的数据。 在写入数据库时​​这不是问题,我们只是将修改的数据写入志愿者文档。 问题出在这样的事实,据我所知,我们没有办法根据stafftypes用户的请求来更新/无效/删除volunteer用户的会话来修改它。 基本上,如果一个staff用户修改一个volunteer用户的数据,而这个volunteer用户没有签名,那么一切工作正常,将会进行修改,数据库中的volunteer文件将被修改。 当志愿者签署这个修改后的数据将从数据库中读取并存储在用户的会话中。 但是,如果staff用户修改了volunteer用户的数据,并且volunteer用户login,则可能会出现问题。 数据库中的volunteer文档将被更新,但是volunteer用户的会话将不会被更新,直到会话结束并且用户再次login从而使他们的文档被从数据库读入到他们的新会话中,或者直到volunteer用户修改他们的数据,使他们的会话更新来自数据库的新数据(这种可能性可能会或可能不会覆盖staff用户所做的改变)。 毋庸置疑,如果不加以解决,这可能会导致不一致。 有没有人有任何build议,我可以如何处理这个。 如果我们要允许一个用户更新另一个用户的数据,是否可以按照计划使用会话存储? 是否有可能使特定用户的会话无效/删除以响应不同的特定用户的请求? 或者可能修改特定用户的会话以响应不同的特定用户的请求? 编辑:不知道这是如何脱离主题,也许有点过于专注,可能没有“最小的理解”,我会尝试纠正,增加一些更多的澄清我的问题: function updateUserDocument(req, res, id, callback) { var data = req.body; var query = { _id: id }; var cmd = { $set: { role: 'volunteer', volunteer: data } }; […]

express.session()parsing/更改服务器上的会话

我想parsing(和更改)存储在服务器上的所有会话。 (如果我可以做到这一点,而不使用商店)。 有没有req.session聚合存储的地方? .session是一个服务器端variables,因此它必须存储所有活动的会话,并且应该是可浏览的。 会话文档 。

在nodejs / expressjs中使用RedisStore

我想快速访问会话数据,所以我想我会尝试在configurationexpress时声明一个connect-redis会话存储。 但是,我不明白为什么这不起作用: var express = require('express'); var http = require('http'); var RedisStore = require('connect-redis')(express); var app = express(); app.set('port', process.env.PORT || 3000); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ secret: "keyboard cat", store: new RedisStore })); //app.use(express.session({ secret: "keyboard cat" })); app.use(app.router); app.get('/', function(req, res){ console.log('/'); req.session.items = [ 'apple', 'orange' ]; res.end('items configured'); }); app.get('/items', function(req, res){ console.log('/items: […]

Passport.js twitter身份validation导致500错误,req.session未定义

我正在尝试使用passport-twitter在Node应用程序中设置会话,这样我就可以保存用户数据,但是从我所知道的情况来看,我无法打开会话支持。 另外,我确保callback函数与Twitter Developers上的应用程序条目匹配。 程序抛出的500错误是: 500 Error: OAuthStrategy requires session support. Did you forget app.use(express.session(…))?** at Strategy.OAuthStrategy.authenticate (/Users/xxxxxxxx/web/Node/on/node_modules/passport-twitter/node_modules/passport-oauth1/lib/strategy.js:120:41) at Strategy.authenticate (/Users/xxxxxxxx/web/Node/on/node_modules/passport-twitter/lib/strategy.js:85:40) …. 当我在120行检查strategy.js时,它说: if (!req.session) { return this.error(new Error('OAuthStrategy requires session support. Did you forget app.use(express.session(…))?')); } 所以,显然req.session是未定义的。 不过,我想我已经做了我需要的一切来获得会议支持工作。 这里是我的主要服务器js文件的大部分: var express = require('express'), app = express(); var http = require('http'), https = require('https'); var mongodb […]

在Express中使用MongoStore时出错

我试图将我的Express应用程序的会话存储在MongoStore中,但是在连接时出现错误。 该错误是一个巨大的对象/ JSON,我无法理解,所以我尝试了所有替代方法,我在网上find,但没有运气,迄今为止… 这里是应用程序configuration: var express = require('express'), MongoStore = require('connect-mongo')(express), passport = require('passport'); var app = express(); app.configure(function(){ app.use(express.compress()); app.use(express.static(path.join(__dirname, 'public'))); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.set('port', process.env.PORT || 8000); app.use(express.favicon(__dirname + '/public/img/favicon.ico')); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser('secret')); app.use(express.session({ secret: 'secret', store: new MongoStore({ db: dbOptions.db, host: dbOptions.host, port: dbOptions.port, username: dbOptions.username, password: […]

session.socket.io错误:无法通过键查找会话:connect.sid

好的。 所以这件事在过去的两天里一直在困扰着我。 所以我决定和大家分享整个代码,找出我错过的东西。 我已经通过了所有在这个问题中的所有意见,除了所有其他类似的问题在stackoverflow,我还没有find一个解决scheme。 这是我的服务器: var express = require('express'); var routes = require('./routes'); var http = require('http'); var path = require('path'); var connect = require('connect'); var redis = require('redis'); var crypto = require('crypto'); var app = express(); var server = http.createServer(app); var io = require('socket.io').listen(server); // Redis Client for saving sessions var rClient = redis.createClient(); […]

如何在socket.io事件中访问快速会话?

我目前正在使用express和socket.io,并构build了一个只接受已经login的用户的socket.io连接的应用程序,我举了一个简单的例子。 请参阅io.sockets.on('连接')部分: var express = require('express'); var app = express(); var http = require('http').createServer(app); var io = require('socket.io').listen(http); var sessionStore = new express.session.MemoryStore(); io.set('authorization', function (handshake, accept) { // I got this from a gist. // Don't know the link anymore, though. var cookies = require('express/node_modules/cookie').parse(handshake.headers.cookie); var parsed = require('express/node_modules/connect/lib/utils').parseSignedCookies(cookies, 'SESSION_SECRET'); sessionStore.get(parsed.sid, function (error, session) […]

TypeError:无法在Object.handle中读取未定义属性'csrfSecret' – 使用Node.js

我正在制作一个简单的networking应用程序,并尝试添加身份validation。 一切工作正常(分开),直到我试图合并authentication页面与应用程序,并收到此错误消息: “TypeError:无法读取在Object.handle(C:Project \ node_modules \ express \ node_modules \ connect \ node_modules \ csurf \ index.js:46:29)undefined属性'csrfSecret'…” 这里是app.js中的代码,也许你会看到问题的根源在哪里。 var flash = require('connect-flash'); var express = require('express'); var app = express(); app.use(function(req, res, next) { req.db = {}; req.db.tasks = db.collection('tasks'); next(); }) app.locals.appname = 'Name of App' var port = process.env.PORT || 8080; var mongoose […]

如何获得NodeJS客户端ID?

运行NodeJs我可以看到一种客户端ID: debug – emitting heartbeat for client hg5ZurBEi8R3Ehf5kuBJ debug – websocket writing 2:: debug – set heartbeat timeout for client hg5ZurBEi8R3Ehf5kuBJ debug – got heartbeat packet debug – cleared heartbeat timeout for client hg5ZurBEi8R3Ehf5kuBJ debug – set heartbeat interval for client hg5ZurBEi8R3Ehf5kuBJ 我正在使用socket.io。 有一种方法可以得到“hg5ZurBEi8R3Ehf5kuBJ”? 一种app.session_id。

阅读node.js中的PHP会话数据

我在php和node.js上工作。 我有一些会议中的数据 [user]= ARRAY([0]=> stdClass Object([username] => XXX, [app_id] -> XXX)) 现在我想从会话中读取app_id,并需要在node.js中使用 var myquery = "SELECT count(cs.id ) AS new_message " + "FROM dcms_corr_status as cs " + "LEFT JOIN `dcms_user` as u ON `u`.`appointment_ref_no` = `cs`.`appointment_ref_no` "+ "WHERE `cs`.`appointment_ref_no` = '" + user_app +"' AND `cs`.`isread` = 0 " + "AND `cs`.`action_or_info` = 1"; […]