从服务器向客户端

时间:2016-06-30 10:15:40

标签: node.js events express websocket

我正在尝试使用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
                });

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

注意,在查询上传递密码不是一个好主意,因为网址不是通过ssl。