Я работаю над проектом, который использует 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