繁体   English   中英

保持用户使用nodeJS登录

[英]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保持低级功能。

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

  1. 使用cookie
  2. 使用IP / UA
  3. 使用套接字

最好的方法是先用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,socket和你的想法,使你的应用程序更安全。

一旦您完成您的会话管理器,你可以选择在哪里存储会话,在一个简单的object ,在redis ,在mongodb ,在mysql ...( express使用MemoryStore默认,但也许不是现在)

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

http://expressjs.com/

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

我认为Nodejs核心中没有任何会话机制。 但是,他们有很多库可以让你这样做。 首先想到的是Connect的会话 ,它是Nodejs的中间件。 有关如何使用它的更多详细信息,请查看此问题

从dailyjs看一下本教程 ,它试图将Express的会话包含在记事本webapp中。 源代码可在此处获得 请注意, Express'会话基于Connect,并且几乎相同)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM