Узел JS Octokit Аутентификация и хранение токена Github - PullRequest
0 голосов
/ 30 января 2019

Цель

Я пытаюсь создать свой первый CLI, используя Node JS, следуя инструкциям, изложенным в руководстве по Sitepoint (см .: https://www.sitepoint.com/javascript-command-line-interface-cli-node-js/).

Для тех, кто пытается спросить, почему я создаю его в Node, это упражнение для меня, и я не стремлюсь оптимизировать свои усилия, используя другие средства, но спасибо за внимание

Проблема

Я пытаюсь установить соединение с Github, позволяющее пользователям организации вводить свои учетные данные (имя пользователя, пароль и, возможно, код 2FA) для подключения к учетной записи организации для доступа к репозиториям.

В настоящее время я могу застрять в той части, где я использую Octokit для передачи учетных данных в github для получения и сохранения его токена.

Ошибка: UnhandledPromiseRejectionWarning: HttpError: Invalid oneпароль для двухфакторной аутентификации

код:

module.exports = {
  getPath: () => {
    return conf.path;
  },
  getInstance: () => {
    return octokit;
  },
  getStoredGithubToken: () => {
    return conf.get('github.token');
  },
  setGithubCredentials: async () => {
    const credentials = await inquirer.askCredentials();
    _.extend(credentials, {
      async on2fa () {
        const questions = {
          name: 'authorization code',
          type: 'input',
          message: 'Two-factor authentication Code:',
          validate: function (value) {
            if (value.length) {
              return true;
            } else {
              return 'Two-factor authentication Code:';
            }
          }
        }
        return questions;
      }
    });
    module.exports.registerNewToken(credentials);
  },
  registerNewToken: async (credentials) => {
    const status = new Spinner('Authenticating you, please wait...');
    status.start();
    credentials.on2fa();
    try {
      const response = await octokit({
        auth: credentials
      });
      response.repos.listForOrg({
        org: '<organization>',
        type: '<type>'
      }).then(({data,status,headers})=>{
        console.log({data,status,headers});
      })
      const token = response;
      if (token) {
        conf.set('github.token', token);
      } else {
        throw new Error("Missing Token", "GitHub token was not found in the response");
      }
    } catch (err) {
      throw err;
    } finally {
      status.stop();
    }
  }
}
...