Ошибка: аргумент учетных данных должен реализовать метод signRequest? - PullRequest
0 голосов
/ 14 июля 2020

Когда я получаю Azure учетные данные с использованием библиотеки «ms-rest- azure».

let credentials = await msRestAzure.loginWithServicePrincipalSecret(id, secret, tanent);
let newCred = JSON.stringify(credentials);
let duplicateCred = JSON.parse(newCred);  // Create duplicate credentials object

Теперь, если я собираюсь использовать «duplicateCred» для дальнейшего вызова функции Azure , тогда я получу указанную выше ошибку. Но если я использую «учетные данные», то все в порядке. Итак, как мне присвоить объект «учетные данные» другой переменной? Так что я буду использовать эту переменную для будущего вызова azure API.

Пример:

let credentials = await msRestAzure.loginWithServicePrincipalSecret(id, secret, tanent);
let newCred = JSON.stringify(credentials);
let duplicateCred = JSON.parse(newCred); // Create duplicate credentials object

// Okay, here I'm getting the proper client object. Because I am using "credentials" in the below line of code.
// I'm getting the results from the below lines of code.
const client = new MonitorManagementClient(credentials, subscription);  
const results = await client.operations.list();
context.log('results==> ', results);

// Error, here not getting the proper client object. Because I am using "duplicateCred" as credentials in the below line of code.
// I'm not getting the results from the below lines of code.
// At the below line I'm getting the above error.
const client = new MonitorManagementClient(duplicateCred, subscription);  
const results = await client.operations.list();
context.log('results==> ', results);

Как создать дубликат объекта учетных данных из фактического объекта учетных данных?

1 Ответ

0 голосов
/ 14 июля 2020

Это неправильный метод. Учетные данные, возвращаемые вызовом msRestAzure.loginWithServicePrincipalSecret, не являются простым объектом, это экземпляр ApplicationTokenCredentials. Когда вы вызываете JSON.stringify, вы теряете эту ссылку на класс и преобразуете все значение в Object. Таким образом, клонированный объект учетных данных теряет цепочку прототипов с помощью методов ApplicationTokenCredentials.

Также ApplicationTokenCredentials не имеет logi c клонирования, что может означать, что его не следует клонировать. Использование вашей собственной логики клонирования c может конфликтовать с будущими версиями библиотеки Azure. Если вам нужен метод клонирования, лучше добавить проблему в официальный репозиторий Azure SDK .

Примечание ! ⚠️ Такой способ клонирования может быть опасным и привести к неожиданному поведению. Этого следует категорически избегать, за исключением случаев, когда действительно нужно стереть цепочку прототипов значений!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...