2013-12-13 5 views
0

У меня есть система входа в систему с моим 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?

ответ

0

Я не думаю, что в ядре Nodejs есть какой-либо механизм сессии. Однако у них много библиотек, которые позволят вам это сделать. Первое, что приходит на ум, - это Connect's session, который является промежуточным программным обеспечением для Nodejs. Посмотрите на this question для получения более подробной информации о том, как его использовать.

Посмотрите на this tutorial от dailyjs, который пытается включить сессию Express в блокнот webapp. Исходный код доступен here. (Обратите внимание, что сеанс Express основан на Connect, и практически тот же).

EDIT: Ниже приведено полное описание example для аутентификации узлов, используя мангуст. Однако они показывают свои схемы, поэтому я предполагаю, что вы легко можете перейти к MySQL.

+0

Хмм, этот учебник использует mongoDB, а не mySQL – Sir

+0

Я уверен, что механизм сессии и db являются очень ортогональными компонентами. – verybadalloc

0

У меня нет идеи, если nodejs имеет основную функцию сохранения сеансов. вам необходимо использовать базу данных вместе с ней. используя Экспресс поможет вам использовать базу данных для сохранения пользовательских сеансов. Лучше учиться и использовать его

http://expressjs.com/

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

+0

Чтение, что они назначают выражение для приложения var, но если у меня уже есть это: 'var app = http.createServer (...' как я могу назначить ему выражение: S бит запутывает – Sir

3

Чтение, что они Назначают выразить вар приложение, но если у меня уже есть это приложение: Var = http.createServer (... как я могу также назначить экспресс к нему: S немного запутанным

Вы должны понимать разницу между экспресс сервером и родной NodeJS»сервер, вот моя ссылка comparaison nodejs server vs express server

Так что вы можете сделать:

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

Это позволит вам иметь еще низкий уровень functionnaly с NodeJS.

Так что, если вы не хотите использовать существующие модули или рамки, вы можете создать свой собственный менеджер сеансов:

  1. с использованием Cookie
  2. с использованием IP/UA
  3. используя сокет

Наилучшим способом было бы реализовать его с помощью разъема , например:

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. 
}); 

Итак, вам просто нужно реализовать промежуточное программное обеспечение, которые проверяют идентификатор.

Если вы хотите предотвратить от session prediction, session sidejacking и т. Д., Вам необходимо объединить куки, ip, сокет и ваши идеи, чтобы сделать его более безопасным для вашего приложения.

После того, как вы сделали ваш менеджер сеансов, вы можете выбрать, где хранить сессии в простом object, в redis, в mongodb, в mysql ... (express использование MemoryStore по умолчанию, но, возможно, не сейчас)

Смежные вопросы