我正在尝试使用nodejs在网站上建立聊天界面。我需要在用户经过身份验证后更新logged_in_user列表。我使用这个代码作为参考
https://github.com/amirrajan/nodejs-chatio.sockets.on('connection', (socket) => {
socket.on('sendchat', (data) => {
io.sockets.emit('updatechat', socket.username, data);
});
可以看到,在'connection'事件中,updatechat事件被触发。在客户端(public/app.js), chatlist会在获取updatechat事件时更新。
我需要做同样的事情,但在客户端经过身份验证之后。我可以调整套接字对象以触发'login'事件的事件吗
这是我的代码
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
});
我试图将登录的用户重定向到另一个端口,并在那里使用套接字'连接'事件。我想知道是否有其他方法可以使用
应该使用socket。用于身份验证的IO中间件。
io.use(function(socket,next){
//auth here
});
查看文档http://socket.io/docs/server-api/
您可以从传递给中间件的套接字对象中获取req和res对象。
注意,在查询上传递密码不是一个好主意,因为url没有传递ssl。