我正在编写一个NodeJS解决方案,它依赖于护照的授权和SocketIO。
当访问套接字连接时,我希望能够获取存储在MongoDB中的用户会话/配置文件(如果有)。(通过连接-蒙戈)。
我已经实现了Passport.socketio,以便从商店访问它。
io.set('authorization', passportSocketIo.authorize({
passport: require('passport'),
cookieParser: cookieParser,
key: 'connect.sid',
secret: 'StackSecret',
store: new store({
db: mongoose.connection.db,
collection: 'sessions',
}),
fail: FailedMethod
}));然后,我可以从“socket.handshake.user”访问用户的配置文件。
socket.on("callback", function(){
console.log(socket.handshake.user); //Fetch Logged in user's Id
})如果我试图阻止对套接字的访问,这将是完美的,但我希望它对每个连接都是开放的(不管是否有会话)。我只想能够访问他们的护照会话Id,如果他们是登录。
从userId访问会话SocketIo的最佳方式是什么?
我希望Passport.socketio过火了,没有它我可以轻松地做到。
发布于 2014-05-12 14:10:00
我喜欢这样的事实:张贴一个问题经常帮助你回答它!
fail方法接受4个参数数据、消息、错误、回调。
你可以在没有授权的情况下启动回电,并取得成功。
function onAuthorizeFail(data, message, error, accept){
accept(null, true);
};发布于 2014-05-12 14:26:38
对于这种情况,您自己的答案可能已经足够了,但是您回答了一个更普遍的问题(如何访问套接字连接的会话信息)。以下是我一般是如何做的。此外,我通常以这样的方式注册所有路由,以便它们获得对配置的引用,因此我还可以为每个请求处理程序提供特定于此特定会话的套接字连接:
var cookie = require("cookie"),
parseSignedCookie = require('connect').utils.parseSignedCookie;
var io = require('socket.io').listen(httpServer);
io.sockets.on("connection", function(socket) {
if (socket.handshake.headers.cookie) {
var cks = cookie.parse(socket.handshake.headers.cookie);
var sessionId = parseSignedCookie(cks["connect.sid"], config.sessionSecret);
config.sessionStore.get(sessionId, function(err, session) {
if (!err) {
console.info("connected socket for ID " + sessionId);
config[sessionId] = socket; // set socket to config so that request handlers could emit on it
socket.on("disconnect", function() {
console.info("disconnected socket for ID " + sessionId);
delete config[sessionId];
});
}
});
}
});为了让请求处理程序知道配置,我通常以以下形式编写它们:
exports.get = function(conn, config) {
return function(req, res, next) {
var socket = config[request.sessionID];
if (socket) {
// socket.emit
}
res.end();
}
}
app.get("/", someModule.get(customConnection, config));关于后者,请参阅https://github.com/codelab-io/node-route-dir下面的更多内容
https://stackoverflow.com/questions/23600334
复制相似问题