У меня проблемы с подпиской на частный канал с PusherJS, который находится в Реактивном приложении .
Backend - это Laravel, но я уверен, что backend / frontend технологии не способствуют решению этой проблемы.
Я использую токены JWT для аутентификации, и похоже, что все работает в этой части. Все приложение работает нормально, но я пытаюсь добавить сокет в систему.
Я предоставлю здесь свои фрагменты кода бэкэнда и внешнего интерфейса, так как я почти уверен, что в этом их вина.
Frontend
const Socket = new Echo({
broadcaster: 'pusher',
key: config.pusher.key,
cluster: config.pusher.cluster,
authEndpoint: config.pusher.authEndpoint,
forceTLS: config.pusher.tls,
auth: {
headers: {
Authorization: `Bearer ${token}`,
},
},
});
Socket.private('users.1').listen('newMessage', (data) => {
console.log(data);
})
Конечная точка аутентификации бэкэнда
public function authorize(Request $request) {
echo Pusher::socket_auth($request->get('channel_name'), $request->get('socket_id'));
return;
}
Конечная точка аутентификации работает, данные возвращаются следующим образом:
{auth: ":2535a2ea3a1ee8f461ceef3a95095518c0205949aa981e6f2xxxxx"}
В консоли я вижу, что приложение внешнего интерфейса успешно подключило пушер
Pusher: состояние изменено: подключен -> подключен с новым идентификатором сокета xxxxxx.xxxxxx
Но подписка не удалась
Pusher: Событие отправлено: {"event": "pusher: subscribe", "data": {"auth": ": 2535a2ea3a1ee8f461ceef3a95095518c0205949aa981e6f2xxxxx", "channel": "private-users.1"}}
Pusher: Событие recd: {"event": "pusher: error", "data": {"code": null, "message": "Значение аутентификации для подписки на private-users.1 недопустимо: должно быть формата 'ключ: подпись' "}}
Pusher: Ошибка: {"type": "WebSocketError", "error": {"type": "PusherError", "data": {"code": null, "message": "Значение аутентификации для подписки на private-users.1 недействителен: должен иметь формат 'ключ: подпись' "}}}
Я пытался использовать только пакет PusherJS , и у меня возникла та же проблема. Теперь я попытался использовать Laravel Echo, и результат тот же.
Также важно то, что когда я подписываюсь на не частный канал, подписка работает, и я могу успешно получать сообщения через канал.
Журнал отладчика Pusher только говорит мне то же самое:
Значение аутентификации для подписки на private-users.1 недопустимо: должно иметь формат «ключ: подпись»
Я отлаживал это несколько часов и понятия не имею, куда идти дальше.