Как получить доступ к объекту клиента в «опубликованном» обратном вызове? - PullRequest
0 голосов
/ 08 апреля 2019

Я использую 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 в клиентском объекте.

У меня есть два вопроса.

  1. Почему вышеуказанный код не работает?
  2. Когда я сохраняю значение в объекте client, передается ли значение клиенту (датчику), которое оно может отправить с последующими запросами, или оно сохраняется только в локальной памяти?

Я новичок в MQTT, поэтому, пожалуйста, извините, если вопросы слишком наивны:)

1 Ответ

1 голос
/ 08 апреля 2019
  1. Если вы можете получить переменную decoded_token в объекте client. Тогда мы можем получить к нему доступ

client.decoded_token

Если вы используете vs код или Webstrom для разработки, вы можете использовать встроенный отладчик для отладки и печати объекта клиента.

  1. Вы не можете передать значение в объект клиента для следующего вызова.
...