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

Javascript 在Express.io中授权websocket连接请求的可能方式有哪些?,javascript,node.js,session,express.io,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会话对

我遇到了两种可能性,我更喜欢在完全建立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注册了自己的“authorize”函数,使Express会话可用于Socket.io

app.io.configure(function() {
  app.io.set("authorize", function(handshake, authorize) {
    // Cookie is available...?
    //handshake.headers.cookie
  });
});
选项2:很容易获得快速会话,但已建立连接

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

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

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

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

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

尽管我在使用和使Redis商店正常工作方面遇到了困难,但我没有特别询问这一点。我的理解是Express.io已经结合了Express和Socket.io会话处理,如选项2所示。Express.io已经定义了一个“授权”函数,它与您建议的会话相匹配。您有什么问题?在建立连接之前,我为您提供了访问会话的方法,我理解这是您的问题。我已用新发现更新了问题。您的建议已经由Express.io完成,使得选项1无法运行(据我所知)。您是正确的,app.io.configure设置了自己的授权功能,但如果您愿意,您可以覆盖它(就像JavaScript中的任何内容一样)。我希望不要这样做,因为它提供了潜在的有用功能。我宁愿在Express.io框架内工作,也不愿处理更新后出现的问题。