Я хотел бы сохранить все на одном сервере, поэтому я хотел бы реализовать сервер socket.io, который обрабатывает соединения от моих продуктов поверх моего веб-сервера аутентификации.
В настоящее время У меня есть функция промежуточного программного обеспечения, которая проверяет, действителен ли данный токен аутентификации:
verifyToken. js:
const jwt = require('jsonwebtoken');
module.exports = function(req, res, next){
// Check if auth-token is avaliable
const token = req.header('auth-token');
if(!token) return res.status(401).send('Access denied');
try{
const verified = jwt.verify(token, "secret");
req.user = verified;
next()
}catch (err){
// Invalid token - not logged in
res.status(201).send('Access denied');
}
}
Я могу использовать это промежуточное ПО на любой конечной точке, которая должна быть Доступно только зарегистрированному действующему пользователю:
const router = require('express').Router();
const verify = require('../authentication_routes/verifyToken');
router.get('/', verify, (req,res) => {
res.send('logged in');
});
module.exports = router;
Как мне реализовать сервер socket.io в этом маршрутизаторе, само приложение NodeJS запускается с порта 3000 и идентификатора, как любой, кто попадает в конечную точку который идет на этот маршрутизатор, подключается к серверу socket.io. Я пробовал это:
const router = require('express').Router();
const io = require('socket.io')(3000);
const verify = require('../authentication_routes/verifyToken');
router.get('/', verify, (req,res) => {
io.on('connection', socket => {
socket.emit('connection-established', 'Connected');
});
});
module.exports = router;
Но это явно не работает, поскольку порт 3000 уже используется сервером NodeJS.
Как бы я go об этом , Я знаю, что есть вопросы, которые (в некоторой степени) отвечают на этот вопрос, но это не включает тот факт, что я использую функцию промежуточного программного обеспечения на защищенной конечной точке?