Как отловить «ошибку доступа» при публикации недоступной темы в mqtt.js? - PullRequest
0 голосов
/ 22 сентября 2019

Я создаю проект с использованием node.js с mqtt.js и брокером mosquitto.В конфигурационном файле mosquitto я установил pwfile, aclfile, чтобы контролировать, к какой теме можно обратиться, к какому пользователю.

Все работает нормально, если имя пользователя, пароль, тема публикации и тема подписки верны.

Но если я изменю тему публикации на недоступную тему, она, кажется, успешно публикует тему без ошибок в mqtt.js, но сообщение никогда не публикуется.

Есть ли способ отловить ошибку, когдаопубликовать или подписаться на недоступную тему?

https://github.com/mqttjs/MQTT.js/blob/master/README.md#publish

Я пытаюсь отловить ошибку в функции обратного вызова с qos = 1, но, похоже, брокер Mosquitto подтверждает клиент без какой-либо ошибки.Конечно, сообщение не было опубликовано в теме, так как у этого клиента нет прав доступа к этой теме.

client.publish('inaccessible_topic', 'hello world', {qos: 1}, (err) => {
  if (err) console.log('error occur: ', err);
  else console.log('message successfully publish');
});

Я полагаю, что mosquitto выдаст какую-то ошибку (error occur: <error message>)когда публикуется в недоступной теме, но это не так (message sucessfully publish).

Интересно, можно ли вообще отловить такую ​​ошибку.Обрабатывает ли mosquitto такую ​​ошибку, и если да, то как ее отловить с помощью mqtt.js?

1 Ответ

1 голос
/ 22 сентября 2019

Вы этого не сделаете.

Брокер не сообщит клиенту, если он попытался опубликовать тему, к которой у него нет доступа, он просто тихо просто отбросит сообщение.

Это было бы уязвимостью безопасности в том смысле, что она раскрывала бы доступные темы.

...