Как я могу отправить запрос POST, чтобы начать поток сброса пароля с помощью Axios - PullRequest
1 голос
/ 11 июня 2019

Я реализую функцию Забыли пароль, используя truevault API.Теперь я тестировал запросы, следующие за потоком с Postman, и это работает, но, когда я начал кодировать с помощью axios, он продолжает создавать проблемы с аутентификацией.Я пробовал несколько комбинаций (логические, а не случайное сумасшествие).

Также стоит упомянуть, что я смог составить список своих истинных пользователей из пользовательского интерфейса (не только почтальона), и попытался имитировать тот же принцип для запроса на публикацию, но он не работал

Вот запрос почтальона, который работал для меня:

  • для запроса URL, метод: POST
  • url: https://api.truevault.com/v1/password_reset_flows
  • Для вкладки АвторизацияЯ заполнил поле «username» пользовательским API-ключом truevault и оставил поле «password» пустым
  • И на вкладке «Body» я заполнил его текстом Json и для параметров переключателей,Я выбрал raw и выбрал json в качестве формата.(это единственные используемые вкладки)

Тело json выглядит следующим образом

{
   "name":"XXXXX password reset",
   "sg_template_id":"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXcf42",
   "sg_api_key":"XX.XXXXXXXXXXXXXXXXXXXXXX.XXXXXX_XXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXZftJo",
   "user_email_value_spec":{
      "system_field":"username"
   },
   "from_email_value_spec":{
      "literal_value":"do-not-reply@XXXXXX.com"
   },
   "substitutions":{
      "{{FIRST_NAME}}":{
         "user_attribute":"first_name"
      }
   }
}

И результат был успешным,

Теперь, когда я попыталсяс axios я продолжал получать ошибку аутентификации.Код выглядит следующим образом:

createPasswordResetFlow()
{
    axios.defaults.headers.common["Authorization"] = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX27"; //tv user API KEY
    axios.defaults.headers.post["Content-Type"] = "application/json";


    var request = axios.post("https://api.truevault.com/v1/password_reset_flows",
        {
            auth:
            {
                username: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX27',
                password: ""
            },
            data:
            {
                "name": "XXXXX password reset",
                "sg_template_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXcf42",
                "sg_api_key": "XX.XXXXXXXXXXXXXXXXXXXXXX.XXXXXX_XXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXZftJo",
                "user_email_value_spec":
                {
                    "system_field": "username"
                },
                "from_email_value_spec":
                {
                    "literal_value": "do-not-reply@XXXXXX.com"
                },
                "substitutions":
                {
                    "{{FIRST_NAME}}":
                    {
                        "user_attribute": "first_name"
                    }
                }
            }
        })
        .then((res) =>
        {
            console.log(res);

            return res.data.users;
        })
        .catch(error =>
        {
            console.log('error', error);
            return error;
        });
}

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

1 Ответ

0 голосов
/ 11 июня 2019

Существует две проблемы с кодом JS, которые вы предоставили, которые вызывают проблему:

  1. Строка, в которой вы устанавливаете заголовок Auth по умолчанию, выглядит следующим образом: axios.defaults.headers.common["Authorization"] = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX27"; //tv user API KEY. Обратите внимание, что в заголовке авторизации задан ключ API, а не значение заголовка HTTP Basic Auth. Если вы хотите установить заголовок аутентификации по умолчанию таким образом, вам нужно установить его на base64(API_KEY:), а не просто API_KEY.

  2. Согласно axios docs метод post имеет подпись .post(url, data, config). В результате ваш код размещает объект JSON, который выглядит как {auth: ..., data: ...}.

Попробуйте удалить строку, в которой вы установили заголовок авторизации, и измените пост-вызов так, чтобы он выглядел примерно так:

axios.post("https://api.truevault.com/v1/password_reset_flows",
        {
                "name": "XXXXX password reset",
                "sg_template_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXcf42",
                "sg_api_key": "XX.XXXXXXXXXXXXXXXXXXXXXX.XXXXXX_XXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXZftJo",
                "user_email_value_spec":
                {
                    "system_field": "username"
                },
                "from_email_value_spec":
                {
                    "literal_value": "do-not-reply@XXXXXX.com"
                },
                "substitutions":
                {
                    "{{FIRST_NAME}}":
                    {
                        "user_attribute": "first_name"
                    }
                }
            }
        }, {
                username: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX27',
                password: ""
            })
...