authenticating users / socket io

3

我是新手,正在构建一个游戏,在这个游戏中,用户需要登录并可以与其他当前已登录的用户或子集进行交互。

我的初步想法是,在用户登录后,将他们/他们的WebSocket客户端ID添加到当前已登录用户的数组中,并将其作为我用来知道谁已登录或未登录的对象。

这种方式是否是处理此类事情的常规方式?

谢谢!

2个回答

4

根据你对“正常”的定义而定。 ;-)

通常,你使用的服务器将提供一些机制来管理“用户状态”,包括用户是否已登录到你的应用程序。

例如,Node.js 的“express”库(以及 express 使用的 “connect” 库)提供了一个 req.session 对象,专门用于此目的,以便你可以执行以下操作:

// user login via POST
//   assumes we're posting two values: username and password
//   as urlencoded data

app.post('/login',function(req,res){

  var username=req.body['username']||'',
      password=req.body['password']||'';

  // check post data (username,password) 
  // against list of allowed users

  if(isAuthorized(username,password)) { // you provide isAuthorized()
    req.session.authorized=true;
  }
  else {
    // display an error message to user
    // and redirect back to the login form
  }
});

// user logout via GET
app.get('/logout',function(req.res){
  req.session.destroy();
});

当您想要向用户提供受保护的页面时,请先检查req.session.authorized是否为true,如果不是,则重定向到登录表单。

有关更多信息,请参见express文档:http://expressjs.com/guide.html


那么对于已登录用户的子集之间的通信呢?我应该使用 express 的哪一部分来识别他们?或者在连接时,当 authorized = true 时,我是否应该将他们的客户端 ID 保存到我的内存对象中,直到断开连接? - fancy
不了解您的需求,很难回答您的问题。"分组"用户的一种可能的方法是向用户记录添加标签,以指示其属于一个或多个组,当用户希望与组中的其他成员通信时,可以使用这些标签。这可以轻松地与Redis的pub/sub功能结合使用,以处理组间消息传递。 - Rob Raisch

1

刚刚在这里找到了终极解决方案:http://www.danielbaulig.de/socket-ioexpress/

它解释了如何在express或node.js中使用会话。 您可以使用redisStore进行持久会话(当您每分钟重新启动服务器3次时非常理想 :))


1
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Bill the Lizard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接