Websocket с серийным номером аутентификации с помощью js и perl

1

Я использую простой js (без библиотеки) для реализации подключения к серверу (для сценария PERL). Посмотрев онлайн, я обнаружил, что в URL-адрес можно добавить пользовательские параметры следующим образом:

var ws=new WebSocket('wss://mydomain.com:9999/?UserID=329729');

Мой вопрос: как тогда в PERL NET :: WebSocket :: Server я могу обработать эту строку запроса, чтобы получить UserID в рукопожатии (если возможно)?

Net::WebSocket::Server->new(
    listen => $ssl,
    silence_max=>3600,
    on_connect => sub {
        my($serv,$conn)=@_;
        $conn->on(
            handshake => sub {
                my($conn,$handshake)=@_;

                # ???



            },
        );
    }
)->start;

Любая помощь может быть оценена

Теги:
authentication
websocket

1 ответ

1
Лучший ответ

В документации есть несколько примеров. Один из них использует событие handshake следующим образом:

    ...
    $conn->on(
        handshake => sub {
            my ($conn, $handshake) = @_;
            $conn->disconnect() unless $handshake->req->origin eq $origin;
        },

Следуя ссылкам на дополнительную документацию, вы можете видеть, что $handshake в событии рукопожатия является объектом Protocol :: WebSocket :: Handshake :: Server, а метод (в настоящее время недокументированный) req используемый в приведенном выше примере, вероятно, приводит к протоколу :: WebSocket :: Запрос объекта. В документации для этого класса упоминается недокументированный метод resource_name но пример, предоставленный для этого класса, предполагает, что это компонент пути URL-адреса, то есть /?UserID=329729 в вашем конкретном вопросе.

Исходя из этого, я бы предположил, что следующее должно работать с вашим конкретным URL-адресом:

    $conn->on(
        handshake => sub {
            my($conn,$handshake)=@_;
            my ($id) = $handshake->req->resource_name =~m{\?UserID=(\d+)};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню