Мне нужно проанализировать или извлечь строку из поля с именем token, вложенного в объект JSON, чтобы заменить электронную почту и пароль для токена сеанса - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь создать токен авторизации сеанса, который можно использовать для последующих вызовов API после того, как пользователь введет свою электронную почту и пароль.

С первым фрагментом кода, показанным ниже, я получаю ответ 200 для правильного адреса электронной почты и пароля, но я получаю ошибку, потому что я не могу получить «токен» из второго фрагмента кода, который я поделился ниже ...

const options = {
  url: 'https://api.knack.com/v1/applications/5e159b77ed2cc100162fae1f/session',
  method: 'POST',
  headers: {
    'content-type': 'application/json',
    'Knack-Application-Id': '5e159b77ed2cc100162fae1f',
    'email': bundle.authData.email,
    'password': bundle.authData.password
  },
  params: {
     'email': bundle.authData.email,
    'password': bundle.authData.password

  },
  body: {
    'email': bundle.authData.email,
    'password': bundle.authData.password

  }
}

return z.request(options)
  .then((response) => {
    response.throwForStatus();
    const results = z.JSON.parse(response.content.token);
    //const token = z.JSON.parse(reponse.content.token)
   // const token=

    // You can do any parsing you need for results here before returning them

    return {
      'sessionKey': results.token
    };
  });

Ответ сверху успешно подтвердил подлинность ответа 200 и предоставил объект JSON, который содержит информацию профиля пользователя И ЗНАК, который мне нужно взять. Я не могу получить необходимую строку из ответа JSON (потому что я нуб), который выглядит следующим образом:

// Data returned by remote login request
{
  "session": {
    "user": {
      "approval_status": "approved",
      "empty_pass": false,
      "id": "user_id",
      "profile_keys": [
        "profile_4"
      ],
      "profile_objects": [
        {
          "entry_id": "entry_id",
          "object": "object_4"
        }
      ],
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTUzMWExNmI2YTEzMTk1ZTcyNmUxZTBmIiwiYXBwbGljYXYpb25faWQiOiI1NTIzMTM5ZjNiY2U2NDdhMDJiZDUxNTAiLCJpYXQiOjE0Mjk3MTgzNzl9.K-WULiJxT-st8vxnTkqxCtp2nv5ykrSToPQsTRx6r1I",
      "utility_key": "key",
      "values": {}
    }
  }
}

Мне нужно получить строку из поля «токен».

Покажи мне дорогу, если можно?

1 Ответ

0 голосов
/ 31 марта 2020

Спасибо за публикацию содержимого переменной response! Если это объект, который вы возвращаете, вы сможете получить доступ к полю token, используя следующий код:

const response = {
  "session": {
    "user": {
      "approval_status": "approved",
      "empty_pass": false,
      "id": "user_id",
      "profile_keys": [
        "profile_4"
      ],
      "profile_objects": [
        {
          "entry_id": "entry_id",
          "object": "object_4"
        }
      ],
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiNTUzMWExNmI2YTEzMTk1ZTcyNmUxZTBmIiwiYXBwbGljYXYpb25faWQiOiI1NTIzMTM5ZjNiY2U2NDdhMDJiZDUxNTAiLCJpYXQiOjE0Mjk3MTgzNzl9.K-WULiJxT-st8vxnTkqxCtp2nv5ykrSToPQsTRx6r1I",
      "utility_key": "key",
      "values": {}
    }
  }
}

console.log(response.session.user.token);
eyJ0eXAiOiJK...

Вы можете использовать . для ссылки на ключ, используемый JavaScript объект. Поэтому, если ваша переменная response, вы можете получить объект session внутри нее, используя response.session, и вы можете получить объект user внутри session с помощью response.session.user.

Однако, во-первых, вы, вероятно, захотите изменить содержимое блока then следующим образом:

    response.throwForStatus();
    const results = z.JSON.parse(response);

    return {
      'sessionKey': results.session.user.token
    };

Функция z.JSON.parse преобразует данные ответа во что-то, что JavaScript может использовать изначально. Если response имеет формат, указанный выше, вы можете использовать эту точечную запись, чтобы получить доступ к каждому внутреннему объекту. Ваш первый пример передает response.content.token, который, кажется, не существует. Попробуйте вместо этого использовать response и посмотрите, приблизит ли это вас.

Эта страница может дать вам больше контекста, чтобы помочь вам выделить некоторые поля внутри этого объекта ответа: https://www.w3schools.com/js/js_json_objects.asp

Удачи!

...