这是一个错误。
如果你有 Debian 或 Ubuntu,试试这个补丁。否则读最后一行。
快速复制粘贴补丁
如果您有 Debian 10 buster 或 Ubuntu 20.LTS 或类似发行版,请尝试以下复制粘贴命令:
wget https://gist.githubusercontent.com/valerio-bozzolan/84364c28a3bba13751c504214016adcf/raw/c1356d529c89c10de4c959058e2e86ffe58fa407/fix-composer.patch -O /tmp/fix-composer.patch
sudo patch /usr/share/php/Composer/IO/BaseIO.php /tmp/fix-composer.patch
如果不行,写在cmets中。
分步说明
您的 Composer 版本有一个错误:您可以保存一个有效的 GitHub 令牌,但它无法再次读取该令牌,因为 Composer 认为您的 GitHub 令牌不能包含下划线或类似的东西。此外,奇怪的是 Composer 只检查了第二次语法。为什么?那是另一个故事。
修复很简单。您可以在 Composer 版本中临时禁用该错误验证。还因为 GitHub 是一项专有服务,并且它们的规范会随着时间而改变(正如您今天所展示的)。因此,不验证 GitHub 令牌的语法是有意义的。唯一应该对 GitHub 令牌进行硬验证的人是 GitHub 本身,而不是 Composer。
如果您通过apt install composer 安装 Composer,可能您将没有任何可用的更新,并且您肯定不能使用 self-update,因为出于安全原因,Composer 是只读的(出于类似的原因,您不应该从root)。相反,您可以创建一个安全的热补丁来修复该特定问题。
要创建补丁,请创建一个名为 /tmp/fix-composer.patch 的文件,其中包含以下确切内容:
103,105c103,105
< if (!preg_match('{^[.a-z0-9]+$}', $token)) {
< throw new \UnexpectedValueException('Your github oauth token for '.$domain.' contains invalid characters: "'.$token.'"');
< }
---
> // if (!preg_match('{^[.a-z0-9]+$}', $token)) {
> // throw new \UnexpectedValueException('Your github oauth token for '.$domain.' contains invalid characters: "'.$token.'"');
> //
从这里也可以看到该内容:
https://gist.github.com/valerio-bozzolan/84364c28a3bba13751c504214016adcf
然后运行此命令以应用该补丁:
sudo patch /usr/share/php/Composer/IO/BaseIO.php /tmp/fix-composer.patch
如果还是不行,可能是你没有通过apt安装composer。
简而言之,无论是何种操作系统,何种安装方法,在您的 Composer 中找到文件 BaseIO.php 并注释掉验证检查。