[英]Keeping a user logged in with nodeJS
我有一个使用mysql-node
NodeJS登录系统。
我遇到的问题是如何保持用户登录,如果他们刷新页面他们必须再次登录,因为我不知道如何存储会话。
我的登录系统是这样的:
socket.on('login', function(data,callBack){
var username = sanitize(data['login']).escape(),
pass = sanitize(data['password']).escape();
var query = connection.query('SELECT uid FROM users WHERE name = ? AND pass = ?', [username,pass],
function(err,results){
if(err){
console.log('Oh No! '+err);
} else if(results.length == 1){
//some how set a session here
} else if(!results.length) {
console.log('No rows found!');
}
});
});
我很难理解如何为每个连接的客户端设置会话。 这可能与NodeJS有关吗?
阅读他们分配快递到var应用程序,但如果我已经有这个:var app = http.createServer(...我怎么能分配快递:S有点混乱
您需要了解快速'服务器和本机NodeJS'服务器之间的区别,这里我的链接comparaison nodejs服务器与快速服务器
所以你可以这样做:
var app = express();
var server = http.createServer(app);
这使您可以使用NodeJS保持低级功能。
因此,如果您不想使用现有模块或框架,则可以构建自己的会话管理器:
最好的方法是先用socket实现它,例如:
server.on('connection', function (socket) {
socket.id = id;
});
要么
server.on('request', function (req, res) {
req.connection.id = id; // The socket can also be accessed at request.connection.
});
所以,你只需要实现一个检查id的中间件。
如果你想阻止session prediction
, session sidejacking
等,你需要结合cookie,ip,socket和你的想法,使你的应用程序更安全。
一旦您完成您的会话管理器,你可以选择在哪里存储会话,在一个简单的object
,在redis
,在mongodb
,在mysql
...( express
使用MemoryStore
默认,但也许不是现在)
我不知道nodejs是否具有保存会话的核心功能。 你需要使用数据库。 使用Express将帮助您利用数据库来持久保存用户会话。 你最好学习和使用它
我认为Nodejs核心中没有任何会话机制。 但是,他们有很多库可以让你这样做。 首先想到的是Connect的会话 ,它是Nodejs的中间件。 有关如何使用它的更多详细信息,请查看此问题 。
从dailyjs看一下本教程 ,它试图将Express的会话包含在记事本webapp中。 源代码可在此处获得 。 ( 请注意, Express'会话基于Connect,并且几乎相同)。
编辑 :这是使用mongoose进行节点身份验证的更完整示例 。 但它们会显示其模式,因此我假设您可以轻松地转换到MySQL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.