NodeJS вход в Github с Octokit возвращает неверные учетные данные - PullRequest
0 голосов
/ 25 января 2020

Я работаю над проектом, который использует Octokit для возврата данных из API Github. Он возвращает 401 Bad Credentials, и я не уверен, как отладить проблему.

В документации сказано разделить строки закрытого ключа с помощью '\ n' и вставить все это в одну строку в код. Поскольку я не хочу хранить закрытый ключ в коде, который я загружаю в ключе из отдельного файла .pem, используя fs.readFileSync(githubCert).toString(). Это правильный способ загрузки закрытого ключа?

Я попытался воссоздать свой файл .pem, включив его в код способом, описанным в документации (также объясненным выше), и попытался использовать вместо него 'token' «на предъявителя» (я знаю, что это не должно сработать, но оно того стоило).

Мои вопросы - это правильный способ сделать это? И что будет правильным процессом для отладки такого рода ошибок?

Вот мой код:

Я создаю приложение Octokit и получаю токен JWT, используя:

const app = new App({ id: process.env.GITHUB_APP_ID, privateKey: fs.readFileSync(githubCert).toString() })
const jwt = app.getSignedJsonWebToken()

И для запроса пользователя от Github я использую:

export async function getUser(username) {
    return await request('GET /users/:username', {
        username: username,
        headers: {
            authorization: `Bearer ${jwt}`,
            accept: 'application/vnd.github.machine-man-preview+json',
        },
    })
}

А ответ от сервера:

{ HttpError: Bad credentials
    at response.text.then.message ([PATH TO FOLDER]/embeddable-github-cards/node_modules/@octokit/request/dist-node/index.js:66:23)
    at process._tickCallback (internal/process/next_tick.js:68:7)
  name: 'HttpError',
  status: 401,
  headers:
   { 'access-control-allow-origin': '*',
     'access-control-expose-headers':
      'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type',
     connection: 'close',
     'content-length': '83',
     'content-security-policy': 'default-src \'none\'',
     'content-type': 'application/json; charset=utf-8',
     date: 'Fri, 24 Jan 2020 21:34:39 GMT',
     'referrer-policy': 'origin-when-cross-origin, strict-origin-when-cross-origin',
     server: 'GitHub.com',
     status: '401 Unauthorized',
     'strict-transport-security': 'max-age=31536000; includeSubdomains; preload',
     'x-content-type-options': 'nosniff',
     'x-frame-options': 'deny',
     'x-github-media-type': 'github.machine-man-preview; format=json',
     'x-github-request-id': 'CDBD:5718:1C15F98:32D0E0F:5E2B62EC',
     'x-ratelimit-limit': '60',
     'x-ratelimit-remaining': '57',
     'x-ratelimit-reset': '1579905160',
     'x-xss-protection': '1; mode=block' },
  request:
   { method: 'GET',
     url: 'https://api.github.com/users/defunkt',
     headers:
      { accept: 'application/vnd.github.machine-man-preview+json',
        'user-agent':
         'octokit-request.js/5.3.1 Node.js/10.16.3 (macOS Mojave; x64)',
        authorization: 'Bearer [REDACTED]' } },
  documentation_url: 'https://developer.github.com/v3' }

Если вам нужно больше кода, здесь ссылка на хранилище : https://github.com/robert-harbison/embed-cards

1 Ответ

0 голосов
/ 02 февраля 2020

Хорошо, поэтому я выяснил, как аутентифицировать API GitHub. Мне нужно было прекратить использовать приложение Octokit и просто использовать запрос Octokit, используя мой личный токен GitHub. Для этого я добавил свой личный токен в переменные окружения и изменил заголовки запроса следующим образом:

export async function getUser(username) {
    return await request('GET /users/:username', {
        username: username,
        headers: {
            Authorization: `token ${process.env.GITHUB_TOKEN}`,
            Accept: 'application/vnd.github.machine-man-preview+json',
        },
    })
} 
...