所需的行为是:
用户1登录,用户1进入名为“用户1”的名称空间。可以根据需要登录任意数量的设备。
User2,相同的处理。
User1和user2无法看到彼此的名称空间。
任何数量的用户都应该能够这样做
一团糟,最好的还是惯用的方式是什么?或任何方式。如果有帮助,我正在使用Express-Session进行身份验证。
这是我到目前为止所拥有的。 “ socketio-auth”库是任何Websocket连接的中间件,而不管名称空间如何。但是那个lib不是必需的。只是想让它工作。
import { Server } from "http";
import socketio from "socket.io";
import socketioAuth from "socketio-auth";
const MongoStore = mongo(session);
dotenv.config({ path: ".env.example" });
// Create Express server
const app = express();
// Create new HTTP server for Websocket connections
const server = new Server(app);
const io = socketio(server);
server.listen(8080);
// Configure auth middleware for websocket\
socketioAuth(io, {
authenticate: async (
socket: SocketIO,
{ username, password }: { username: string, password: string },
callback: Function
) => {
try {
const user = db.findUser('User', { username }).exec();
//inform the callback of auth success/failure
if (!user) {
throw new Error("User not found");
}
// socket.on(username, ())
return callback(null, user.password === password);
} catch (error) {
return callback(new Error("User not found"));
}
},
postAuthenticate: async (
socket: SocketIO,
{ username, password }: { username: string, password: string }
) => {
// do some....thing
}
});