tayurus-frontend
@tayurus-frontend
Frontend-разработчик

Как корректно генерировать сигнатуру для POST запроса?

Друзья, помогите, пожалуйста, разобраться.
В описании задании есть инструкция, как отредактировать некоторую запись на сервере. Вот эта инструкция:


Для редактирования задачи нужно передать в POST, помимо самих редактируемых полей, специальный токен (используйте строку "beejee" в качестве значения этого поля) и дополнительный параметр-подпись "signature".

Для генерации подписи нужно:

  1. собрать все поля, отправляемые в POST, в том числе token (кроме самого поля signature),

  2. отправлять можно только редактируемые поля + token + signature

  3. отсортировать по алфавиту все поля, кроме token (поле token должно быть последним),

  4. выполнить URL-кодированние параметров запроса (имени параметры и значения параметра), кодирование происходит по стандарту RFC 3986 (например, строка "example@example.com" кодируется в "example%40example.com")

  5. собрать отсортированные URL-кодированые поля в одну строку запроса (params_string), разделитель между имененем параметра и его значением - символ "=", между разными параметрами - символ "&" (получится, например, status=0&text=SomeText&token=beejee). Напоминаем, что параметры должны быть кодированы по стандарту RFC 3986,

  6. рассчитать md5-хеш от URL-кодированной строки запроса (md5(params_string)) и отправить этот md5-хеш в поле 'signature' в POST вместе с другими параметрами


Я сделал это так:
function patchCard(id, newData) {
  const { text, status } = newData;

  const bodyWithoutSignature =
    "status=" +
    (status
      ? encodeURIComponent(statusReady)
      : encodeURIComponent(statusNotReady)) +
    "&text=" +
    encodeURIComponent(text) +
    "&token=" +
    encodeURIComponent(token);

  const md5Hash = md5(bodyWithoutSignature);

  const body =
    bodyWithoutSignature + "&signature=" + encodeURIComponent(md5Hash);

  const query = baseURL + "/edit/" + id;

  const requestOptions = {
    method: "POST",
    body: body
  };

  return fetch(query, requestOptions).then(handleResponse);
}


От сервера приходит status ОК, но ничего не редактируется. Прошу помочь.

P.S. В приведенном выше коде я пытаюсь изменить на сервере поля "text" и "status"
  • Вопрос задан
  • 1023 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы