используя твиттер API для получения токена - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь использовать твиттер API, но необходимо пройти аутентификацию.Есть 2 типа, и мне нужно только Application-only authentication aka app only.Это тип аутентификации, когда приложение выполняет запросы API от своего имени.

В документах объясняется, как использовать этот метод, вам необходимо использовать токен на предъявителя.Вы можете сгенерировать токен на предъявителя, передав свой ключ и секретный ключ через конечную точку POST oauth2 / token.

Вот ссылка на документы, объясняющая эту конечную точку .Есть даже пример запроса, но все же мне не очень понятно, что нужно сделать.

У меня есть ключ API и секретный ключ API, но я получаю следующую ошибку:

body: '{«errors»: [{«code»: 170, «message»: «Отсутствует обязательный параметр: grant_type», «label»: «forbidden_missing_parameter»}]}'}

Мой код на стороне сервера выглядит следующим образом

var request = require('request');
var btoa = require('btoa');

const KEY = encodeURIComponent('1234');
const SECRET = encodeURIComponent('5678');

request({
    headers: {
      'Authorization': 'Basic ' + btoa(`${KEY}:${SECRET}`),
      'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    },
    uri: 'https://api.twitter.com/oauth2/token',
    method: 'POST',
    body:  JSON.stringify({
      'grant_type': 'client_credentials' // I am passing the grant_type here
    })
  }, function (err, res, body) {
    console.log('res', res)
  });

Запрос CURL в документации выглядит следующим образом:

POST /oauth2/token HTTP/1.1
Host: api.twitter.com
User-Agent: My Twitter App v1.0.23
Authorization: Basic eHZ6MWV2R ... o4OERSZHlPZw==
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Content-Length: 29
Accept-Encoding: gzip

grant_type=client_credentials

1 Ответ

0 голосов
/ 23 октября 2018

Для этого было несколько вещей.Сначала запрос нужно было сделать на стороне сервера.Вам необходимо установить btoa из npm, чтобы обеспечить кодирование ключа и секретного ключа.КЛЮЧ и СЕКРЕТ должны быть разделены двоеточием.Тело запроса должно быть строкой

'grant_type=client_credentials'

См. Полный пример кода ниже.

const btoa = require('btoa');

request({
    headers: {
      'Authorization': 'Basic ' + btoa(`${KEY}:${SECRET}`),
      'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    },
    uri: 'https://api.twitter.com/oauth2/token',
    method: 'POST',
    body: 'grant_type=client_credentials'
  }, (error, response, body) => {
    const token = JSON.parse(body).access_token;
  });
...