Как сделать пространство имен доступным только вошедшему в систему пользователю в Socket.io? - PullRequest
0 голосов
/ 14 декабря 2018

Желаемое поведение:

  • Пользователь 1 входит в систему, пользователь 1 переходит в пространство имен, называемое "пользователь 1".Может войти на столько устройств, сколько захочет.

  • Пользователь2, та же сделка.

  • Пользователь1 и пользователь2 не могут видеть пространства имен друг друга.

  • Любое количество пользователей должно иметь возможность сделать это

Вид тупика, каким будет лучший или идиоматический способ?Или любым способом.Я использую экспресс-сессию для аутентификации, если это помогает.

Это то, что я имею до сих пор.Библиотека «socketio-auth» является промежуточным программным обеспечением для любого соединения Websocket независимо от пространства имен.Но эта библиотека НЕ ​​является требованием.Просто пытаюсь заставить это работать.

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
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...