我在我的应用上使用express-socket.io-session。我已将其集成并且工作正常。但是只有一个案例。
查看以下代码:
io.use(...);
io.sockets.on("connection", function (socket) {
socket.onVerify = (msg, fn) => {
socket.on(msg, (data) => {
console.log(socket.handshake.session.passport);
if (typeof socket.handshake.session.passport === "undefined") {
socket.emit("auth failed emit", {
msg: "Please login via the website"
});
return false;
}
fn(data, socket.handshake.session);
});
}
socket.onVerify("chat message", function (req, session) {
Chat.publish(session.email, req.msg);
});
});
基本上,在每个套接字请求上,我验证socket.handshake.session.passport
已被定义,这意味着用户已登录。
在这种情况下适用:
但是,在这种情况下它不起作用:
我在我的代码(console.log(socket.handshake.session.passport)
)中添加了一个调试,它显示{ user: 1 }
虽然我已经注销,但它必须是undefined
由于某种原因,socket.io握手/会话无法识别它,所以我可能需要在某些情况下刷新它。
用socket.io有什么办法吗?
答案 0 :(得分:0)
这只是尝试解决您的问题,我不确定它会起作用。但你可以试试这样的事情:
app.get("/logout", function(req,res){
//do other logging out stuff
sockets.disconnectUser(req.session.user_id);
}
// Disconnect User function
sockets.disconnectUser = function(user_id){
sockets.socket(users[user_id]).disconnect();
}