如何在不使用 websockets 加密的情况下在节点 js 中创建基本身份验证系统?
how to create a basic authentication system in node js without encryption using 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);
});
代码来自:Client-server communication in Node.js(upthecreek 的示例)
在上面的示例中,您将在客户端和服务器之间来回发送消息,但是如果我想将 json 作为“消息”(用户名和密码)从客户端发送到服务器怎么办?我如何让服务器知道: json 对象实际上是登录信息?(从我在示例中看到的,这个 websocket 模块中只有类型 'message' )我熟悉阻塞style ,我会在 client/server 之间发送消息并等待响应。像这样:
理想服务器:
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;
}
}
});
使用 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);
});
代码来自:Client-server communication in Node.js(upthecreek 的示例)
在上面的示例中,您将在客户端和服务器之间来回发送消息,但是如果我想将 json 作为“消息”(用户名和密码)从客户端发送到服务器怎么办?我如何让服务器知道: json 对象实际上是登录信息?(从我在示例中看到的,这个 websocket 模块中只有类型 'message' )我熟悉阻塞style ,我会在 client/server 之间发送消息并等待响应。像这样:
理想服务器:
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;
}
}
});