Отправить пользовательские данные наряду с handshakeData в socket.io?

Таким образом, у меня есть приложение рабочий узел js с socket.io как бэкенд и нормальный JavaScript как frontend. Мое приложение имеет систему входа в систему, которая в настоящее время просто сделала, чтобы клиент отправил ее данные входа в систему, как только оно соединено.

Теперь я полагал, что будет намного более хорошо отправить данные входа в систему наряду с handshakeData, таким образом, у меня сможет непосредственно быть пользователь, зарегистрированный, в то время как соединение (вместо после установления соединения) соответственно отказывается от авторизации, когда данные входа в систему недопустимы.

Я думаю, что было бы лучше поместить мои дополнительные данные в часть заголовка handshakeData, таким образом, какие-либо идеи, как я мог сделать это? (Не имея необходимость изменять socket.io, если это возможно, но если это - единственный путь, я могу жить с ним),

57
задан 6 December 2012 в 18:18

1 ответ

Старый поток, но принятие Вас хранит Ваш jwt идентификатор маркера/сессии в сеансовых куки (стандартный материал), это передается серверу по умолчанию так или иначе при выполнении квитирования (socket.io-клиент), я заметил. Есть ли что-то не так только с получением подлинной информации для квитирования (через промежуточное программное обеспечение или on.connection) через cookie? например,

io.on('connection', function(socket) {
  // assuming base64url token
  const cookieStr = socket.handshake.headers.cookie
  const matchRes =
    cookieStr == null
      ? false
      : cookieStr.match(/my-auth-token=([a-zA-Z0-9_.-]+)/)
  if (matchRes) {
    // verify your jwt...
    if ( tokenIsGood(matchRes[1]) {
      // handle authenticated new socket
    } else {
      socket.emit('AUTH_ERR_LOGOUT')
      socket.disconnect()
    }
  } else {
    socket.emit('AUTH_ERR_LOGOUT')
    socket.disconnect()
  }
}

я использую это теперь для проекта, и он хорошо работает.

0
ответ дан 1 November 2019 в 15:29

Другие вопросы по тегам:

Похожие вопросы: