我正在尝试向所有观看者发送管理员通知。当管理员连接我加入(' admin')并且我想在该房间收听通知消息并将其传递给所有用户。这是有效的,但是我从用户那边做了一个测试,发现我仍然可以发送消息,好像我是管理员一样!?
var express = require('express'),
app = express(),
http = require('http'),
connect = require('connect'),
cookieParser = express.cookieParser('fwefwefvccc'),
sessionStore = new connect.middleware.session.MemoryStore();
app.configure(function () {
app.use(cookieParser);
app.use(express.session({ store: sessionStore }));
});
var server = http.createServer(app),
io = require('socket.io').listen(server),
sessionSockets = require('session.socket.io'),
sessions = new sessionSockets(io, sessionStore, cookieParser);
sessions.on('connection', function (err, socket, session) {
// Client functions trimmed for SO
socket.on('adminJoin', function(data) {
if(data.password == "testing") {
socket.join('admin');
}
}
socket.in('admin').on('notification', function (data) {
io.sockets.emit("notification", {
'type': data.type,
'msg': data.msg
});
});
});
似乎忽略了用户不在/ admin / room
中的事实答案 0 :(得分:0)
我知道这不是你想要做的,但考虑到没有回复的时间,我认为这种“解决方法”可以解决问题。
请注意,这是未经测试的代码:)
当管理员加入时,让套接字知道它是管理员。
socket.on('adminJoin', function(data) {
if(data.password == "testing") {
socket.set("isadmin",true);
}
}
当套接字收到消息时,请检查套接字是否为admin。
socket.on("message,function(){
if(socket.get("isadmin") == true)
{
io.sockets.emit("notification","Somethign happende")
}
})