Я использую Mosca в качестве встроенного MQTT-брокера с москитной оболочкой. Я использую Mosca в основном как механизм аутентификации, который может читать токены jwt и извлекать из него некоторые значения. Я создал собственные авторизаторы для чтения токена JWT в поле пароля mqtt и декодирования / проверки его. После декодирования я добавляю декодированные поля к клиентскому объекту, как показано ниже
authenticate(client, username, password, next) {
try {
const decoded_token = jwt.verify(password.toString(), process.env.SECRET_KEY_BASE);
client.decoded_token = decoded_token;
next(null, true);
} catch(error) {
console.log('name: %s, error: %s', error.name, error.message);
console.log('unauthorized!');
next(null, false);
}
}
Я хочу получить доступ к значению decoded_token
в обратном вызове published
, как показано ниже
broker.on('published', (packet, client) => {
console.log(client.decoded_token);
console.log('Published', packet.topic, packet.payload);
});
Каким-то образом приведенный выше код не работает должным образом. Я получаю следующую ошибку:
TypeError: Невозможно прочитать свойство 'decoded_token' из неопределенного
Принимая во внимание, что вместо console.log(client.decoded_token)
я использую console.log(client)
, это работает, и я вижу значение decoded_token
в клиентском объекте.
У меня есть два вопроса.
- Почему вышеуказанный код не работает?
- Когда я сохраняю значение в объекте client, передается ли значение клиенту (датчику), которое оно может отправить с последующими запросами, или оно сохраняется только в локальной памяти?
Я новичок в MQTT, поэтому, пожалуйста, извините, если вопросы слишком наивны:)