Этот пост в блоге о реализации, кажется, объясняет вещи немного больше: https://pusher.com/docs/client_api_guide/client_private_channels
Схема авторизации основана на
идея, что, а не
реализация пользовательского пользователя
аутентификация и добавление сложности
и заявить, чтобы подтолкнуть, мы должны доверять
существующий уровень аутентификации
предложенный вашей заявкой. Мы тоже
хотел убедиться, что кто-то читает
данные, отправленные из вашей заявки на
браузер не сможет подключиться
на канал в качестве этого пользователя, и
поэтому не может включать в себя какие-либо секреты
на странице HTML.
Похоже, что бизнес-логика вашего приложения должна аутентифицировать пользователя и решить, что он должен получить доступ к частному каналу.
Их диаграмма показывает:
После проверки подлинности приложение запрашивает подписку пользователя. Pusher отвечает с помощью socket_id. Затем они подключаются с помощью этого.
Вот как они это описывают:
Как показано на этой диаграмме, уникальный
Идентификатор сокета генерируется и отправляется
браузер от Pusher. Это отправлено
ваше приложение (1) через AJAX
запрос, который разрешает пользователю
доступ к каналу против вашего
существующая система аутентификации. Если
успешно ваше приложение возвращает
строка авторизации для браузера
подписал с тобой секрет пушера. Это
отправлено Pusher через WebSocket,
который завершает авторизацию (2)
если строка авторизации совпадает.
Пример внизу поста в блоге уточняет:
Предположим, у вас есть канал с именем project-3, к которому у пользователей A и B есть доступ, но нет C. Вы хотели бы сделать этот канал частным, чтобы пользователь C не мог прослушивать частные события. Просто отправьте события в private-project-3 и подпишитесь на него в браузере. Пока вы используете последний javascript (версия 1.3 или выше), вы увидите, что к вашему приложению делается запрос POST к / pusher / auth. В настоящее время это не удастся, и поэтому запрос на подписку не будет сделан для сокета.
Итак, для меня это звучит так:
1) Запрос на подписку отправляется в Pusher
2) Нажмите POST для вашего метода / auth, чтобы определить, может ли пользователь получить доступ к каналу.
3) Если ваша бизнес-логика позволяет пользователю получить доступ к этому каналу, метод auth возвращает ответ «ok»:
auth = Pusher[params[:channel_name]].socket_auth(params[:socket_id])
content_type 'application/json'
return JSON.generate({
:auth => auth
})
Я не использовал сам Pusher, но его модель, похоже, отражает структуру других моделей на основе push. Надеюсь, это поможет!