从服务器发送登录事件到客户端

Posted

技术标签:

【中文标题】从服务器发送登录事件到客户端【英文标题】:Sending a login event from server to client 【发布时间】:2016-06-30 10:15:39 【问题描述】:

我正在尝试使用 nodejs 在网站上设置聊天界面。 用户通过身份验证后,我需要更新 logged_in_user 列表。 我用这段代码作为参考

https://github.com/amirrajan/nodejs-chat

io.sockets.on('connection', (socket) => 
  socket.on('sendchat', (data) => 
    io.sockets.emit('updatechat', socket.username, data);
  );

正如您在 'connection' 事件中看到的,触发了 updatechat 事件。 在客户端(public/app.js),聊天列表在获取 updatechat 事件时更新。

我需要做同样的事情,但在客户端通过身份验证之后。 我可以以某种方式调整套接字对象以触发“登录”事件的事件

这是我的代码

app.get('/authenticate',function(request,response)
                
                var db = couch.db.use('users');
                var email = request.query['email'];
                var pass = request.query['password'];
                db.get(email,email:email,function(err,body)
                                if(err)
                                console.log(err);
                                else
                                

                                var user_pass = body['password'];
                                var name = body['name'];
                                console.log(user_pass);
                                if(pass == user_pass)
                                

                eventEmitter.emit('login',name);
                response.render('pages/dashboard',user:body['name']);
                                
                 
                );

// And on 'login' event
eventEmitter.on('login', function(name)
                

                // ?????? Broadcast the new user to all logged in users to update the chatlist
                );

我试图将登录的用户重定向到另一个端口并在那里使用套接字“连接”事件。它有点工作,但我想知道是否有其他方法可以使用。

【问题讨论】:

您如何进行身份验证?使用 Ajax 还是正常的整页加载? 【参考方案1】:

您应该使用 socket.io 中间件进行身份验证。

  io.use(function(socket,next)
        //auth here
  );

查看文档http://socket.io/docs/server-api/

您可以从传递给中间件的套接字对象中获取 req 和 res 对象。

注意,在查询中传递密码不是一个好主意,因为 url 没有传递 ssl。

【讨论】:

以上是关于从服务器发送登录事件到客户端的主要内容,如果未能解决你的问题,请参考以下文章

我如何更新从WebChat组件触发的对话更新事件的channelData?

在服务器事件上向客户端发送信息

在服务器事件上从服务器向客户端发送通知

从 Twisted 客户端发送到 Twisted 服务器,只有这一种方式

为啥http请求从客户端发送两次到服务器(OPTION和POST)[重复]

服务器发送事件与 websockets?