验证用户/套接字io
我是新手,我正在构建一个游戏,用户需要登录并且可以与其他当前登录的用户进行交互。验证用户/套接字io
我最初的想法是,他们登录后,将他们的/他们的websocket客户端ID添加到当前登录的用户数组,并有我操纵知道谁登录或不。
这是一个正常的方式去做这种事情吗?
谢谢!
取决于您对“正常”的定义。 ;-)
通常,您使用的服务器将提供一些管理“用户状态”的机制,包括用户是否已登录到您的应用程序。
例如,节点的“表达”库(和“连接”表达应用“下”)提供了一个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是否为真,如果不是,则重定向到登录表单。
见明示的文档的更多的http://expressjs.com/guide.html
刚刚找到最终的解决方案在这里:http://www.danielbaulig.de/socket-ioexpress/
它说明了如何使用会话无论是明示或node.js中 而且你可以使用redisStore进行永久会话(理想情况下,每分钟重启服务器3次:))
虽然这可能在理论上回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。 – 2012-01-04 13:05:17
登录用户的子集之间的通信如何?我会用一些快递的部分来识别它们吗?或在连接,当授权=真时,我会保存他们的客户端ID到我自己的对象在内存中,直到断开连接? – fancy 2011-05-11 20:28:06
不知道您的要求,很难回答您的问题。对用户进行“分组”的一种可能方式可能是将标签添加到用户的记录中,以指示一个或多个组中的成员身份,当用户希望与其他组成员通信时可以使用该组。这可以很容易地与Redis的pub/sub功能相结合来处理群组间消息。 – 2011-05-12 16:53:29