node.js - Vue 和 Node WebSockets - 如何在建立连接之前对用户进行身份验证?
问题描述
在客户端应用程序成功建立与 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 协议使用相同的端口是一种好习惯吗?
谢谢!
解决方案
如果用户通过身份验证但建立新连接,此代码可帮助您建立连接。我认为在您的情况下,如果用户已经通过身份验证,则您寻求做,如果没有,则建立连接,然后要求他注册。
推荐阅读
- r - 如何在 excel/csv 中输入数据以在 R studio 中制作多个图表
- sql - 在 AWS Athena 中将小数转换为货币
- python - 识别车内车辆登记的轮廓区域
- javascript - Electron 14:TypeError:无法读取未定义的属性(读取“打开”)
- javascript - 将 fetch api 调用转换为 ajax
- google-slides-api - GAS - 用脚本创建谷歌幻灯片涂鸦线
- c# - SPA 默认页面中间件无法返回默认页面“/index.html”
- ant - Ant-Build 上的 CodenameOne 问题
- python - 如何在 sanic-openapi 的查询参数中添加“允许的选项”/选择
- docker - JBoss cli 连接到 docker