如何在nodejs中创建一个基本的身份验证系统,而不使用websockets进行加密



使用node.js,我一直在网上搜索创建一个简单的客户端-服务器模型的方法,在该模型中,客户端请求登录验证,同时以json发送信息。我看过很多关于这个过程的文章和文档,但我看到的每个客户端-服务器模型都是这样的:

服务器:

const WebSocket = require('ws');
// Set up server
const wss = new WebSocket.Server({ port: 8080 });
// Wire up some logic for the connection event (when a client connects) 
wss.on('connection', function connection(ws) {
// Wire up logic for the message event (when a client sends something)
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
// Send a message
ws.send('Hello client!');
});

客户端:

// Create WebSocket connection.
const socket = new WebSocket('ws://localhost:8080');
// Connection opened
socket.addEventListener('open', function (event) {
socket.send('Hello Server!');
});
// Listen for messages
socket.addEventListener('message', function (event) {
console.log('Message from server ', event.data);
});

代码来自:Node.js中的客户端-服务器通信(upthecreck的示例(

在上面的示例中,您将在客户端和服务器之间来回发送消息,但如果我想将json发送为";消息";(用户名和密码(从客户端到服务器?我如何让服务器知道:json对象实际上是登录信息?(从我在示例中看到的情况来看,这个websocket模块中只有"message"类型(我熟悉阻塞样式,在这种样式中,我会在客户端/服务器之间发送消息并等待响应。类似这样的东西:

理想服务器:

const WebSocket = require('ws');
// Set up server
const wss = new WebSocket.Server({ port: 8080 });
// Wire up some logic for the connection event (when a client connects) 
wss.on('connection', function connection(ws) {
// Wire up logic for the message event (when a client sends something)
ws.on('message', function incoming(message) {
if (message) == "login"{ // if login was sent as the message type
ws.on("credentials" , function check_credentials(json){ //wait on the user and password (blocking)
//check credentials against database and update client
})
}
});
// Send a message
ws.send('Hello client!');
});

正如您所看到的,服务器会阻塞并等待用户的凭据与数据库匹配。我知道这可能不是一个工作的例子,只是目标。不散列和加密密码是个坏主意,但这只是为了理解目的。提前谢谢。

有些库可以为您做到这一点,但最简单的方法(imo(是在消息中使用事件说明符。

客户端

// do login
ws.send(JSON.stringify({t: 'login', username: 'username', password: 'password'}));

服务器

ws.on('message', function(message) {
let data;
try {
data = JSON.parse(message);
} catch {
return;
}
switch(data.t) {
case 'login': {
// handle login and save state somewhere
break;
}
case 'otherevent': {
// Handle some other event
break;
}
}
});

相关内容

  • 没有找到相关文章

最新更新