保持用户使用nodeJS登录

时间:2013-12-13 02:40:33

标签: mysql node.js

我的NodeJS使用mysql-node登录系统。

我遇到的问题是如何保持用户登录,如果他们刷新页面他们必须再次登录,因为我不知道如何存储会话。

我的登录系统是这样的:

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有关吗?

3 个答案:

答案 0 :(得分:3)

  

读到他们为var app分配了express,但是如果我已经有了这个:var app = http.createServer(...我怎么能为它分配express:S有点混乱

您需要了解快速“服务器和本机NodeJS”服务器之间的区别,此处为我的链接comparaison nodejs server vs express server

所以你可以这样做:

var app = express();
var server = http.createServer(app);

这使您可以使用NodeJS保持低级功能。

因此,如果您不想使用现有模块或框架,则可以构建自己的会话管理器:

  1. 使用cookie
  2. 使用IP / UA
  3. 使用套接字
  4. 最好的方法是先用 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 predictionsession sidejacking等,您需要结合使用Cookie,IP,套接字和您的想法,以使其对您的应用更安全。

    完成会话管理员后,您可以选择简单的objectredismongodbmysql中的会话存储位置...(默认情况下express使用MemoryStore,但现在可能不会使用{/ p>}

答案 1 :(得分:0)

我不知道nodejs是否具有保存会话的核心功能。你需要使用数据库。使用 Express 将帮助您利用数据库来持久保存用户会话。你最好学习和使用它

http://expressjs.com/

http://blog.modulus.io/nodejs-and-express-sessions

答案 2 :(得分:-1)

我认为Nodejs核心中没有任何会话机制。但是,他们有很多库可以让你这样做。我想到的第一个是Connect's session,它是Nodejs的中间件。有关如何使用它的更多详细信息,请查看this question

查看来自dailyjs的this tutorial,试图将Express的会话包含到记事本webapp中。源代码可用here。 (请注意 Express'会话基于Connect,并且几乎相同)。

编辑:这是使用mongoose进行节点身份验证的更完整example。然而,它们显示了它们的模式,因此我假设您可以轻松地转换到MySQL。