【发布时间】:2015-03-09 04:48:56
【问题描述】:
我为我的 socket.io/express 应用程序创建了一些护照身份验证中间件。它看起来像:
io.use(function (socket, next) {
var data = cookie.parse(socket.handshake.headers.cookie);
var sessionID = cookieParser.signedCookie(data['connect.sid'], 'my balonga has a first name');
sessionStore.get(sessionID, function (err, data) {
if (err) next(err);
socket.handshake.passport = data.passport;
next();
});
});
它工作得很好,但我有一个命名空间,它似乎使用了不同的套接字。这是否意味着我必须为每个命名空间重用我的中间件?
我注意到我连接到我的命名空间,它调用基础服务器的中间件,然后调用命名空间,这意味着如果我在两个地方都包含中间件,我将执行两倍于我需要的操作。我可以在不删除基础层的中间件的情况下防止这种情况吗?这些都不是应用程序破坏者,但它会稍微改变我的架构,我担心我会在某些时候出现身份验证漏洞。
总结:
- 我必须为每个命名空间重复使用我的中间件吗?
- 当默认命名空间中间件连接到命名空间时,是否可以在不移除基础层中间件的情况下阻止调用默认命名空间中间件?
【问题讨论】:
-
如何在 Express 中定义命名空间?
-
我相信,Express 没有命名空间,它有路由。 Socket.io 有命名空间。
-
这么想...我使用featherjs来管理套接字之间的共享并表示是否有帮助...
-
是的,自从我发布了这个,实际上有很多东西可以帮助管理这个,包括我写的一个包 - npmjs.com/package/express-session-socket.io
-
你使用什么会话中间件?
标签: node.js express socket.io middleware socket.io-1.0