Я пытаюсь проанализировать дополнительные переменные, используя transportOptions, но получаю ошибку:
Примечание. При использовании кода, который не работает, код на стороне сервера даже не достигается.
index.js:83 OPTIONS http://127.0.0.1:3000/socket.io/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1YjZjM2MzMGQ0YTQyNDIyNzE5MjhjOWIiLCJpYXQiOjE1MzYyMTg4NDcsImV4cCI6MTU5NjIxODc4N30.5eGEA9X7-x95M17rdqYvrVuwQ6rQ6kRKHGx-me6lnOg&EIO=3&transport=polling&t=MMk1XIV 400 (Bad Request)
chat1.html:1 Failed to load http://127.0.0.1:3000/socket.io/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1YjZjM2MzMGQ0YTQyNDIyNzE5MjhjOWIiLCJpYXQiOjE1MzYyMTg4NDcsImV4cCI6MTU5NjIxODc4N30.5eGEA9X7-x95M17rdqYvrVuwQ6rQ6kRKHGx-me6lnOg&EIO=3&transport=polling&t=MMk1XIV: Response for preflight does not have HTTP ok status.
Вот что я пытаюсь использовать:
const jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI1YjZjM2MzMGQ0YTQyNDIyNzE5MjhjOWIiLCJpYXQiOjE1MzYyMTg4NDcsImV4cCI6MTU5NjIxODc4N30.5eGEA9X7-x95M17rdqYvrVuwQ6rQ6kRKHGx-me6lnOg";
const chatId = '5b893a24fe8ad11b42cd1a2e';
Не работает:
const socket = io("http://127.0.0.1:3000", {
query: {
token: jwt
},
transportOptions: {
polling: {
extraHeaders: {
'chatid': chatId
}
}
}
});
Что работает, то:
const socket = io("http://127.0.0.1:3000", {
query: {
token: jwt
},
});
Сервер односторонняя:
io.sockets.use(async (req, next) => {
await socketUtil.validateJwt(req, next);
});
// Other file
export const validateJwt = async (socket, next) => {
try {
const token = socket.handshake.query.token;
const valid = await isValidJwt(token);
if (valid) {
return next();
}
return next(new Error('Invalid JWT: ' + token));
} catch (e) {
return next(new Error('Internal server error: ' + e));
}
};