Не має значення, чи маркер був створений на іншому сервері. Ви все ще можете перевірити це, якщо у вас є правильний секретний ключ та алгоритм.
Реалізація за допомогою jsonwebtoken
модуля
клієнт
const {token} = sessionStorage;
const socket = io.connect('http://localhost:3000', {
query: {token}
});
Сервер
const io = require('socket.io')();
const jwt = require('jsonwebtoken');
io.use(function(socket, next){
if (socket.handshake.query && socket.handshake.query.token){
jwt.verify(socket.handshake.query.token, 'SECRET_KEY', function(err, decoded) {
if (err) return next(new Error('Authentication error'));
socket.decoded = decoded;
next();
});
}
else {
next(new Error('Authentication error'));
}
})
.on('connection', function(socket) {
socket.on('message', function(message) {
io.emit('message', message);
});
});
Реалізація за допомогою socketio-jwt
модуля
Цей модуль значно полегшує автентифікацію як на стороні клієнта, так і на сервері. Просто перегляньте їх приклади.
клієнт
const {token} = sessionStorage;
const socket = io.connect('http://localhost:3000');
socket.on('connect', function (socket) {
socket
.on('authenticated', function () {
})
.emit('authenticate', {token});
});
Сервер
const io = require('socket.io')();
const socketioJwt = require('socketio-jwt');
io.sockets
.on('connection', socketioJwt.authorize({
secret: 'SECRET_KEY',
timeout: 15000
})).on('authenticated', function(socket) {
console.log(`Hello! ${socket.decoded_token.name}`);
});