在Express.io中授权websocket连接请求的可能方法有哪些?

时间:2014-02-18 16:08:07

标签: javascript node.js session express.io

我遇到了两种可能性,并且更喜欢在完全建立websocket之前执行检查的解决方案。

var express = require("express.io");
var app = express().http().io();

app.use(express.json());
app.use(express.cookieParser());
app.use(express.session({secret: process.env.COOKIESECRET}));

选项1:如何获取Express会话对象?
更新:这可能不可行,因为Express.io注册了自己的“授权”功能,使Express会话可用于Socket.io。

app.io.configure(function() {
  app.io.set("authorize", function(handshake, authorize) {
    // Cookie is available...?
    //handshake.headers.cookie
  });
});

选项2:轻松获得Express会话,但已建立连接。

app.io.route("test", function(req) {
  if(!req.session.IsAuthorized) {
    req.io.disconnect();
  }
});

1 个答案:

答案 0 :(得分:1)

您可以传入对会话库的引用,以便在配置套接字服务器时可用:

var sessionStore = new express.session.MemoryStore();

app.use(express.session({secret: process.env.COOKIESECRET, store: sessionStore}));

我认为您应该能够通过将handshake.headers对象与会话存储中的内容进行匹配来从中获取其余内容。请注意,默认存储保存在内存中,这对于生产目的来说并不是很好(但我现在很好)。以上内容与您的选项1方法有关。