【发布时间】:2019-07-20 08:08:09
【问题描述】:
我正在开发一个聊天应用程序,但我不知道是否应该使用房间或命名空间以及如何使用。
我的应用程序大致如下所示:
体育(频道)
- Sport_A(子频道)
- Sport_B(子频道)
政治(渠道)
- Politics_A(子频道)
- Politics_B(子频道)
- Politics_C(子频道)
等等……
我的要求:
非授权用户只能阅读频道中的消息。 Auth用户可以在频道和子频道中读写消息。
非授权用户可以同时(加入和离开)多个频道。 认证用户可以同时(加入和离开)多个频道和子频道。 这意味着
这有点复杂,因此我不知道应该在哪里使用房间,在哪里命名空间以及如何处理身份验证。
现在我有一个默认命名空间“/”,频道和子频道是房间,但是在哪里执行身份验证以不阻止非身份验证用户?
io.use((socket, next) => {
if (socket.handshake.query && socket.handshake.query.token) {
jwt.verify(socket.handshake.query.token, process.env.JWT_SECRET, (err, decoded) => {
if (err) return next(new Error('Socket authentication error'));
socket.decoded = decoded;
next();
});
} else {
next(new Error('Socket authentication error'));
}
});
【问题讨论】:
-
@jfriend00 我发现你的回答对其他套接字问题非常有用,你能帮我解决这个问题吗?