Результатом axios.post является неправильный запрос - grant_type: 'client_credentials' - PullRequest
0 голосов
/ 07 апреля 2019

Мой метод POS axios не работает нормально.Хотя синтаксис вызова кажется правильным, я думаю, что в моем конкретном случае есть глубоко укоренившаяся проблема.Я пытаюсь получить токен доступа, используя grant_type = client_credentials, используя запрос POST к fiware IDM-серверу.В результате вызова 400: bad request.

команда curl работает просто замечательно.Кажется, есть нарушение CORS, когда я использую простой http-запрос, поэтому я переключился на использование узла.Я попробовал axios, отправив данные в отдельном теле, оно тоже не сработало, затем кто-то предложил отправить данные в вызове с помощью axios.post, что также привело к той же проблеме.Примечание: я пробовал grant_type=password, однако, что также постигла та же участь.

axios.post('https://account.lab.fiware.org/oauth2/token',{ 
'grant_type':'client_credentials'},{
headers: 
{
'Content-Type':'application/x-www-form-urlencoded',     
'Authorization': 'Basic xxxx'   
}

}).then((response) => {
    console.log(response);
    }).catch((error) =>{
    console.log(error.response.data.error);
    })

Я ожидаю получить токен доступа, однако я получаю ошибку 400, как показано ниже:

{ message: 'grant_type missing in request body: {}',
code: 400,
title: 'Bad Request' }

1 Ответ

0 голосов
/ 07 апреля 2019

Проблема в том, что хост на https://account.lab.fiware.org/oauth2/token ожидает, что данные тела будут x-www-form-urlencoded, но axios преобразует тело в json для вас.Это поведение по умолчанию с axios.

Измените ваш код аксиоса, чтобы отправлять x-www-form-urlencoded данные тела, такие как:

// use querystring node module
var querystring = require('querystring');

axios.post('https://account.lab.fiware.org/oauth2/token',{
  // note the use of querystring
  querystring.stringify({'grant_type':'client_credentials'}),{
  headers: {
    'Content-Type':'application/x-www-form-urlencoded',     
    'Authorization': 'Basic xxxx'   
  }
}).then(...
...