处理来自多个登录的变量以进行实时聊天

蓝色

我正在编写一个结合了登录功能和实时聊天功能的nodejs服务器。当我尝试让所有登录并连接到我的实时聊天服务器的用户返回到客户端时,问题就来了(以便他们可以选择要与之聊天的特定用户)。

这是我的登录功能代码。我声明了一个变量,因此当客户端请求/ doLogin时,用户名将存储在其中

var userLogged = {name: null, socketid: null};

app.post('/doLogin', function(req,res){
    db.users.findOne({username: req.body.username}, function(err, user) {
        if( err ) {
            console.log("Login fail");
        }
        else if (user != null) {
            if (req.body.password == user.password) {
                req.session.user_role = "user";
                userLogged.name = req.body.username;
            } else {
                req.session.user_role = "null";
            }
        }
        res.send({redirect: "/"});
    });

});

在实时聊天功能(使用Socket.io)中,当用户连接(登录后)时,我会将socket.id以前存储到变量中,然后将该变量保存在mongodb中。

io.sockets.on('connection', function(socket){
     var address = socket.handshake.address;
     userLogged.socketid = socket.id;

     db.clientList.save({name: userLogged.name, socketid: userLogged.socketid}, function(err, saved){
     });
    console.log("Connection " + address.address + " accepted.");
    //
    //
    socket.on('disconnect', function(){
        db.clientList.remove({socketid: userLogged.socketid});
    });
});

问题是,当其他用户登录时,变量会更改,因此我无法将正确的信息保存到数据库中。请帮我!

湿帽

socket.io允许您读取cookie:

// app.js
io = io.listen(server);
io.set('authorization', function (handshakeData, accept) {
    handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
});

正确的方法是:

cookies --> sessionID --> user --> username

文档:http//howtonode.org/socket-io-auth


更简单:

如果安全性对您不重要,则可以将用户名设置为cookie,然后在服务器中轻松读取用户名: cookies->username

// login handler
res.cookie('username', username)
res.send({redirect: "/"});

// io connection handler
io = io.listen(server);
io.set('authorization', function (handshakeData, accept) {
    console.log(handshakeData.headers.cookie)
}

请注意,任何网络用户都可以更改自己的cookie以伪造您的名字,因此这是测试,您不应将其用于生产。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

来自多个表的 JavaFX 登录系统

来自分类Dev

同步处理来自多个线程的数据

来自分类Dev

如何对包含来自多个数据的变量列表的列表中的每个对象进行排序

来自分类Dev

在C中处理来自多个库的错误代码

来自分类Dev

处理来自多个文档的字形以重新排列PDF

来自分类Dev

Python & Tkinter:来自多个类的多处理

来自分类Dev

如何处理来自多个窗口的消息

来自分类Dev

使用来自多个Fetch API请求的变量

来自分类Dev

来自多个变量的javascript缓冲区

来自分类Dev

来自多个线程的cudaEventSynchronize

来自分类Dev

来自多个列表的Countif

来自分类Dev

来自多个列表的UNION

来自分类Dev

来自多个管道的输入

来自分类Dev

来自多个模式的 DWH

来自分类Dev

来自多个 Foreach 的 Linq

来自分类Dev

来自多个表的求和?

来自分类Dev

来自多个表的图表

来自分类Dev

RasterStack / Brick用于来自多个文件夹R中的多个文件的多个变量

来自分类Dev

在单个活动中处理来自多个意图的多个数据

来自分类Dev

c# 如何使用多线程处理来自多个线程的多个返回值?

来自分类Dev

处理来自 Youtube 的实时视频以进行语音到文本

来自分类Dev

如何对来自多个列的多个行进行分组和联接?

来自分类Dev

来自多个表 MySQL 的多个 Where OR

来自分类Dev

来自多个 WITH/CTE 的多个插入

来自分类Dev

流星如何处理来自多个用户的相同订阅?

来自分类Dev

配置Nginx服务器以处理来自多个域的请求

来自分类Dev

合并器是否可以处理来自多个映射器的结果?

来自分类Dev

使用多重处理,使用来自多个数据加载器的对象填充队列

来自分类Dev

处理来自多个文件的IP地址时,如何忽略重复的行?

Related 相关文章

热门标签

归档