gpt4 book ai didi

node.js - 强制 share.js 使用相同的快速 session 数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:47 24 4
gpt4 key购买 nike

我有一个简单的 express 应用程序,它使用 session 中间件和 passport-local 中间件。然后,我使用 share.jsbrowserchannel 通过 share.listen(stream) 将数据流式传输到服务器。全部符合文档 here .

我的问题是我无法访问流中的 session 数据(由 Passport-local 修改并包含已登录的用户 ID)。我需要它能够根据某些逻辑限制/授予 client.on('message', function(data) {..}); 内的访问权限,但最重要的是检查消息来自登录用户。在那里,如果我尝试读取 ID,它将与 req.user._id 中的内容不同。看来 share.js 或 browserchannel 使用了一些不同的 session ,也许?..

代码如下:

var app = express();
var express = require('express');
...

// SETUP AND INIT
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true,
limit: 1024 * 1024 * 10
}));
app.use(methodOverride());
app.use(session({
secret: global.CONFIG.session.secret,
maxAge: new Date(Date.now() + 1000 * 60 * 60 * 24 * 2),
store: new MongoStore(global.CONFIG.mongo),
resave: true,
saveUninitialized: true
}));
app.use(express.static(__dirname + '/build'));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());


// Create the sharejs server instance.
var backend = livedb.client(livedbMongo(global.CONFIG.mongo.url, false));
var share = sharejs.server.createClient({
db: backend
});
app.use(browserChannel(function(client) {
var stream = new Duplex({objectMode: true});

stream._write = function(chunk, encoding, callback) {
if (client.state !== 'closed') {
client.send(chunk);
}
callback();
};

stream._read = function() {
};

stream.headers = client.headers;
stream.remoteAddress = stream.address;

client.on('message', function(data) {
console.log(client.id) // <- I wish it was the same as in req.user._id..
stream.push(data);
});
stream.on('error', function(msg) {
client.stop();
});
client.on('close', function(reason) {
stream.emit('close');
stream.emit('end');
stream.end();
});

// Actually pass the stream to ShareJS
share.listen(stream);
}));

最佳答案

在我看来,从代码来看,可能有一个不需要破解模块的解决方案:

var browserChannel = require('browserchannel').server;

var middleware = browserChannel(options, function(session, req) {
if (req.user) {
session.user = req.user;
}
});

app.use(middleware);

参见here .

关于node.js - 强制 share.js 使用相同的快速 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com