аутентификация пользователя с помощью сокета.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.