аутентификация пользователя с помощью сокета.io

Я вот красный в этом уроке: http://howtonode.org/socket-io-auth. Он показывает, как аутентифицировать пользователей с помощью express и socket.Ио. Но есть ли способ аутентификации пользователей, используя только сокет.io без необходимости экспресс?

edit:

для обработки сеанса я использую RedisStore (https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO). Что осталось-это модуль для создания файлов cookie аутентификации. Кто-нибудь знает розетки.реализация ввода-вывода я могу использовать для создания файла cookie аутентификации, как вы можете сделать с обработкой сеанса?

3 ответов


Я знаю, что это немного устарело, но для будущих читателей в дополнение к подходу разбора cookie и извлечения сеанса из хранилища (например. паспорт.socketio) вы также можете рассмотреть подход на основе маркеров.

в этом примере я использую веб-токены JSON, которые довольно стандартны. Вы должны дать странице клиента маркер, в этом примере представьте конечную точку проверки подлинности, которая возвращает JWT:

var jwt = require('jsonwebtoken');
// other requires

app.post('/login', function (req, res) {

  // TODO: validate the actual user user
  var profile = {
    first_name: 'John',
    last_name: 'Doe',
    email: 'john@doe.com',
    id: 123
  };

  // we are sending the profile in the token
  var token = jwt.sign(profile, jwtSecret, { expiresInMinutes: 60*5 });

  res.json({token: token});
});

Теперь ваша розетка.IO сервер может быть настроено следующим образом:

var socketioJwt = require('socketio-jwt');

var sio = socketIo.listen(server);

sio.set('authorization', socketioJwt.authorize({
  secret: jwtSecret,
  handshake: true
}));

sio.sockets
  .on('connection', function (socket) {
     console.log(socket.handshake.decoded_token.email, 'has joined');
     //socket.on('event');
  });

розетка.IO-JWT middleware ожидает токен в строке запроса, поэтому от клиента вам нужно только прикрепить его при подключении:

var socket = io.connect('', {
  query: 'token=' + token
});

Я написал более подробное объяснение этого метода и cookies здесь.


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

Я думаю (но не знаю), что были downvotes, потому что вам нужна какая-то обработка сеанса, и вы, скорее всего, не хотите делать это вручную; -). Следовательно, это довольно хорошая идея придерживаться Express здесь.

тем не менее, это интересный вопрос, хотя я не могу ответить, как это сделать без Экспресс.


Я довольно новичок в узле.Джей-Эс, это началось несколько дней назад. и я могу ответить только на первую часть вопроса, что проверка подлинности пользователя без использования экспресс. и у меня еще нет обработки в стиле сеанса.
причина, по которой я все еще отвечаю на этот вопрос, - помочь другим людям, которые новички в узле, с более простым альтернативным решением для начала.

решение, которое я сейчас использую в своем учебном проекте (сокет.io-чат, что еще?) использует http-сервер для аутентификации.
если вы не можете получить действительную аутентификацию на http-сервере, вы никогда не получите доступ к странице с сокетом.интерфейс ввода-вывода.

аутентификация пользователя на http-сервере обрабатывается путем считывания некоторых данных POST. только если данные POST являются допустимыми пользовательскими данными, пользователь может перейти в чат, где находится сокет.интерфейс io.