BotBuilder, Direct Line API возвращает «tokenParameters отсутствует пользователь» с расширенными параметрами аутентификации - PullRequest
2 голосов
/ 07 мая 2019

У меня есть бот, опубликованный в учетной записи Azure, из которого я пытаюсь извлечь магический код, поэтому, следуя документации Direct Line , я улучшил код, чтобы скрыть токен.Но как только параметры расширенной аутентификации включены, я всегда получаю один и тот же ответ.

{
  "error": {
    "code": "BadArgument",
    "message": "tokenParameters is missing User."
  }
}

И я не могу понять, как выполнить HTTP-запрос с данными пользователя.

бот основан на BotFramework SDK v4, а также на некоторых контроллерах для запроса и обновления токена с использованием инкапсулированного секретного ключа.Я добавил userId данных в запрос разными и неправильными способами, получая всегда один и тот же результат.

Запрос кода токена

server.post('/dl/tokenRequest', async (_, res) => {
  try {
    const userId = "dl_testuser1";
    const askToken = await fetch('https://directline.botframework.com/v3/directline/tokens/generate', {
      headers: {
        authorization: Bearer ${ process.env.DIRECT_LINE_SECRET }
      },
      //HERE THE userId INFORMATION,
      method: 'POST'
    });
    const json = await askToken.json();
    if ('error' in json) {
      console.log('Requesting token - Error');
      res.send(500);
    } else {
      console.log(`Requesting token ` + json.token);
      res.send(json);
    }
  } catch (err) {
    res.send(500);
  }
});

Как следуетЯ поместил информацию о пользователе, чтобы получить ОК от DL API, как я получил до включения расширенного инструмента?

1 Ответ

1 голос
/ 07 мая 2019

Похоже, вам не хватает Content-Type в заголовке.Посмотрите на фрагмент кода ниже.

try {
  const res = await fetch('https://directline.botframework.com/v3/directline/tokens/generate', 
    { 
      method: 'POST',
      headers: {
        'Authorization': `Bearer <SECRET>`,
        'Content-Type': 'application/json'
      },
      body: {
        user: { 
          id: "dl_123", // user id must start with 'dl_'
          name: "user" 
        }
      }
    });

    const json = await res.json();

} catch (error) {
  console.log(error)
}

Обратите внимание, вам не нужно проверять, есть ли «ошибка» в ответе JSON - об этом должен позаботиться блок try-catch.

Надеюсь, это поможет!

...