Pusher не расшифровывает входящие уведомления - PullRequest
2 голосов
/ 06 января 2020

Я работаю над приложением Laravel, которое имеет интерфейс React. У меня есть настройки уведомлений с использованием толкателя, который все работает нормально.

Я пытаюсь использовать сквозное шифрование, как описано здесь https://pusher.com/docs/channels/using_channels/encrypted-channels

В моей конфигурации / трансляции. php У меня есть следующее

'pusher' => [
    'driver' => 'pusher',
    'key' => env('PUSHER_APP_KEY'),
    'secret' => env('PUSHER_APP_SECRET'),
    'app_id' => env('PUSHER_APP_ID'),
        'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'useTLS' => true,
            'encryption_master_key' => env('PUSHER_ENCRYPTION_KEY'),
        ],
] 

В моем .env PUSHER_ENCRYPTION_KEY установлено, и я вижу уведомления, поступающие через консоль отладки Pusher, зашифрованные, как и следовало ожидать.

В моем интерфейсе я создаю экземпляр Pusher следующим образом

const socket = new Pusher(process.env.MIX_PUSHER_APP_KEY, {
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    authEndpoint: '/api/broadcasting/auth'
});
socket.subscribe('private-encrypted-user.' + props.user.id);

socket.bind('App\\Events\\TaskCreated' , function (data) {            
    console.log(data)
});

Я вижу на вкладке своей сети /api/broadcasting/auth отвечает дополнительным полем, которое теперь называется shared_secret. Согласно документам это используется для расшифровки входящего уведомления, и дешифрование должно быть автоматическим c. Когда я запускаю, запускается App\\Events\\TaskCreated console.log(data), но данные все еще зашифрованы.

В документах также указано if a client is unable to decrypt a message, it will make another request to your auth endpoint to obtain a new decryption key. If the client is still unable to decrypt the message with the new key, it will throw an error., но никаких ошибок не выдается, и к /api/broadcasting/auth

не отправляются дальнейшие запросы.

Я включил Pusher.logToConsole = true;, и все выглядит хорошо. Я даже получаю "pusher_internal:subscription_succeeded","channel":"private-encrypted-user.2", что наводит меня на мысль, что аутентичная сторона работает должным образом.

Кто-нибудь может увидеть, что мне не хватает?

1 Ответ

1 голос
/ 06 января 2020

Я разобрался!

В моем коде выше я связываю событие с сокетом, когда мне нужно связать его с каналом. Потраченный день, но ниже - рабочий код на случай, если кто-то еще столкнется с той же проблемой

const socket = new Pusher(process.env.MIX_PUSHER_APP_KEY, {
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    authEndpoint: '/api/broadcasting/auth'
});

const channel = socket.subscribe('private-encrypted-user.' + props.user.id);

channel.bind('App\\Events\\TaskCreated' , function (data) {            
    console.log(data)
});
...