Сбой проверки подлинности при установке\обновлении Composer

Когда я пытаюсь установить зависимость из своего личного репозитория, я получаю следующую ошибку:

> php.exe composer.phar update
Loading composer repositories with package information

  [RuntimeException]                                                           
  Failed to clone https://my.stash.repo/scm/lib/my-super-lib.git, could no  
  t read packages from it                                                      

  fatal: Authentication failed for 'https://my.stash.repo/scm/lib/my-super-lib.git/'                                                                   

update [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--lock] [--no-plugins] [--no-custom-installers] [--no-scripts] [--no-progress] [--with-dependencies] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [packages1] ... [packagesN]

Process finished with exit code 1 at 10:57:04.
Execution time: 1 996 ms.

Соответствующая часть composer.json выглядит следующим образом:

   "require": {
        "php": ">=5.3.0",
        "scaytrase/my-super-lib": "1.1"
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "https://my.stash.repo/scm/lib/my-super-lib.git"
        }
    ],

Если я установлю имя пользователя и пароль напрямую, как

"url":  "https://username:[email protected]/scm/lib/my-super-lib.git"

композитор работает нормально. Но я не хочу хранить учетные данные в виде открытого текста.

Есть ли способ заставить композитора каждый раз запрашивать имя пользователя и пароль?

Репозиторий — это Atlassian Stash с https nginx перед ним (были протестированы как https, так и http)

Composer version 70a20ebcc19f1ea8ab0954a4fbdce208b30085e7 2014-03-12 16:07:58

ИЗМЕНИТЬ:

На данный момент я выполняю git clone --mirror самостоятельно, чтобы заполнить кеш композитора, а затем я просто запускаю установку композитора или обновление композитора, как обычно (но он говорит, что иногда не может обновить информацию о пакете)

код:

            $command = sprintf('git clone --mirror %s %s', escapeshellarg($this->url), escapeshellarg($this->repoDir));
            if (0 !== $this->process->execute($command, $output)) {
                $output = $this->process->getErrorOutput();

                if (0 !== $this->process->execute('git --version', $ignoredOutput)) {
                    throw new \RuntimeException('Failed to clone '.$this->url.', git was not found, check that it is installed and in your PATH env.' . "\n\n" . $this->process->getErrorOutput());
                }

                throw new \RuntimeException('Failed to clone '.$this->url.', could not read packages from it' . "\n\n" .$output);
            }

manual git clone --mirror работает нормально и запрашивает мои учетные данные. А вот composer (который, очевидно, выполняет ту же команду) — нет.

ИЗМЕНИТЬ2

Кажется, это проблема PHP Storm 8 EAP, которую я использую. Последняя стабильная версия требует правильной аутентификации во время composer install, но не во время composer update.


person ScayTrase    schedule 18.03.2014    source источник


Ответы (2)


Кажется, это ошибка в последней версии PhpStorm 8 EAP 134.1456. PhpStorm 7.1.3 работает с композитором как с командной строкой (идентичное поведение) и выполняет composer install отлично (но не composer update, но командная строка тоже не работает).

Я отправил сообщение об ошибке.

ИЗМЕНИТЬ

Мой отчет об ошибке для композитора был заменен этим

UPD2

Пока вопрос совершенно не актуален. Composer правильно обрабатывает аутентификацию, а также запрашивает сохранение учетных данных в COMPOSER_HOME/auth.json

person ScayTrase    schedule 19.03.2014
comment
Более конкретный, чем мой ответ. +1 - person VonC; 19.03.2014

Вы можете настроить зашифрованный файл с этими http-учетными данными, чтобы git мог использовать их из этого зашифрованного файла.
Это предполагает, что работающий агент gpg может предоставить уникальный пароль, необходимый для доступа к этому файлу учетных данных, зашифрованному gpg.

Тогда URL-адрес, который вы будете использовать, будет таким:

https://[email protected]/scm/lib/my-super-lib.git

Это позволяет git запрашивать у своего помощника по учетным данным правильный пароль (тот, что для 'username' ).

См. "Есть ли способ пропустить ввод пароля при использовании https://github" для конкретного примера.

person VonC    schedule 18.03.2014
comment
Это приводит к ненужным трудностям с использованием composer. Каждая машина (или даже пользователь), которая хочет использовать мой частный репозиторий, должна будет выполнить эту операцию (поэтому, очевидно, я не хочу хранить даже имя пользователя в composer.json). Будет проще вручную клонировать все зависимости и настроить автозагрузчик, который убивает все функции композитора. Я надеюсь, что есть более простой способ - person ScayTrase; 18.03.2014
comment
@ScayTrase Я согласен. Это для централизованного доступа (где только один пользователь должен ввести свои учетные данные или, в моем ответе, ключ gpg (один раз за сеанс, а не каждый раз). Это было бы так. если бы все пользователи могли получить доступ к одному клонированному репозиторию и запустить композитор оттуда, но это может быть невозможно в вашем случае. - person VonC; 18.03.2014