Невозможно получить доступ к / удалить секретные списки из учетной записи Github даже с правильными данными авторизации
Я очень много искал для этого, но не смог найти ничего полезного, и я не беглый разработчик Nodejs.
Я пытаюсь удалить мои старые и устаревшие секретные списки из моей учетной записи Github с помощью приведенного ниже кода, но он правильно выполняет только часть аутентификации.
#!/usr/bin/env node
const Octokit = require('@octokit/rest')
const octokit = new Octokit()
var async = require('async');
var github = new Octokit({
version: '14.0.0',
protocol: 'https'
});
github.authenticate({
type: 'basic',
username: '###############',
password: '###############'
});
async.waterfall([
function (callback) {
console.log(github.gists.getAll());
github.gists.getAll({}, callback);
},
function (gists, callback) {
// filter gists by properties as needed
async.each(gists, function (gist, callback) {
github.gists.delete({
id: gist.id
}, callback);
}, callback);
}
], function (err) {
if (err) {
console.log('Execution failed: %s', err.message);
process.exit(1);
}
console.log('Done!');
process.exit(0);
});
Когда я запускаю приведенный выше скрипт в Gitbash(Windows 7 64Bit с установленными Node и Npm), он выдает эту ошибку:
Promise { <pending> }
Execution failed: {"message":"Not Found","documentation_url":"https://developer.github.com/v3"}
Но я знаю, что эти секретные сущности есть.
Это даже не перечисляет те секретные суть, когда мне нравится,
console.log(gist.id)
сразу после async
вызов функции.
Любая помощь приветствуется.
1 ответ
Похоже, вы используете устаревшие @octokit/rest
, Убедитесь, что у вас установлена последняя версия v16.3.1. Вы можете проверить, какую версию вы установили, запустив npm ls @octokit/rest
в вашем терминале.
Поскольку вы потенциально загружаете и удаляете много гистологов, я бы порекомендовал использовать плагин Throttle. Это поможет вам избежать злоупотребления / ограничения скорости. Вот полный код.
const Octokit = require('.')
.plugin(require('@octokit/plugin-throttling'))
const octokit = new Octokit({
auth: {
username: '###############',
password: '###############'
},
throttle: {
onAbuseLimit: (retryAfter) => console.log(`abuse limit hit, retrying after ${retryAfter}s`),
onRateLimit: (retryAfter) => console.log(`rate limit hit, retrying after ${retryAfter}s`)
}
})
// load all your gists, 100 at a time.
octokit.paginate('/gists?per_page=100')
.then((gists) => {
// filter out the public gists
const privateGists = gists.filter(gist => !gist.public)
console.log(`${privateGists.length} gists found`)
// delete all private gists
return Promise.all(privateGists.map(gist => octokit.gists.delete({ gist_id: gist.id }))
})
.then(() => {
console.log('done')
})
Вместо аутентификации с вашим именем пользователя и паролем, я бы порекомендовал создать токен личного доступа. Убедитесь, что вы выбрали область "gist": https://github.com/settings/tokens/new?scopes=gist&description=deleting%20private%20gists
Затем передайте токен в опцию auth конструктора вместо имени пользователя и пароля
const octokit = new Octokit({
auth: 'token <your token here>',
throttle: {
onAbuseLimit: (retryAfter) => console.log(`abuse limit hit, retrying after ${retryAfter}s`),
onRateLimit: (retryAfter) => console.log(`rate limit hit, retrying after ${retryAfter}s`)
}
})