【问题标题】:Vue and Node WebSockets - How to authenticate user before establishing connection?Vue 和 Node WebSockets - 如何在建立连接之前对用户进行身份验证?
【发布时间】:2020-08-19 07:57:37
【问题描述】:

在客户端应用程序成功建立与 Node 服务器(例如,Electron 应用程序)的连接之前提供一些检查的最佳方法是什么。

来自 websocket/ws 库的

Ipinca 建议使用 server.on('upgrade', ...) 事件监听器,但是使用它,我们只能检查当前从客户端发送的数据。

const http = require('http');
const WebSocket = require('ws');

const server = http.createServer();
const wss = new WebSocket.Server({ noServer: true });

wss.on('connection', function connection(ws, request, ...args) {
  // ...
});

server.on('upgrade', async function upgrade(request, socket, head) {
  // Do what you normally do in `verifyClient()` here and then use
  // `WebSocketServer.prototype.handleUpgrade()`.
  let args;

  try {
    args = await getDataAsync();
  } catch (e) {
    socket.destroy();
    return;
  }

  wss.handleUpgrade(request, socket, head, function done(ws) {
    wss.emit('connection', ws, request, ...args);
  });
});

server.listen(8080);

但是,如果我们想检查用户是否已经通过身份验证,并且在这种情况下,我们不想再次对他进行身份验证,该怎么办?在为这些检查打开 WebSocket 连接之前,我们是否需要发送一些 http 请求,对于 Ws 和 Http 协议使用相同的端口是一种好习惯吗?

谢谢!

【问题讨论】:

    标签: node.js http vue.js websocket electron


    【解决方案1】:

    如果用户通过身份验证但建立新连接,此代码可帮助您建立连接。 我认为在您的情况下,如果用户已经通过身份验证,则您寻求做,如果没有,则建立连接,然后要求他注册。

    【讨论】:

      【解决方案2】:

      如果您之前已经对用户进行了身份验证,并且他们携带了一个 cookie 来识别他们,您可以从 server.on('upgrade'...wss.on('connection'... 事件处理程序的 request 参数访问该数据,作为节点 http.IncomingMessage 的实例类(或类似的东西,无论如何)。

      您可以将请求对象本身或来自 request.headers.cookie 的 cookie 与您的身份验证解决方案(无论是中间件还是自制)一起使用,以验证用户应该能够继续,就像在 HTTP 中一样路线。

      【讨论】:

        猜你喜欢
        • 2012-10-30
        • 2020-03-21
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 2017-09-01
        • 2011-01-18
        • 2014-03-16
        • 2017-08-27
        相关资源
        最近更新 更多