我正在尝试使用 composer 安装一个 github 项目并得到以下错误
Composer [UnexpectedValueException] 您的 github.com 的 Github oauth 令牌包含无效字符:“”
谁能解释我需要做什么来纠正这个错误?
我正在使用以下命令
composer create-project --prefer-dist --stability=dev vova07/yii2-start yii2-start
谢谢
composer self-update
的新答案对我很有帮助:stackoverflow.com/a/67828227/470749
我开始遇到类似的错误,原因是 Github 最近更改了他们的身份验证令牌的格式:
要解决错误:
找到 composer/auth.json 文件(如果你在容器中运行项目,你将不得不 bash 进入它并在其中找到文件)删除它的 github.com 条目。删除条目后,您的文件可能如下所示: {"github-oauth": {}} 运行 composer self-update。该问题已在 2.0.12 版中得到解决。在此处查看该版本的变更日志中的第一项:https://getcomposer.org/changelog/2.0.12
之后,您可以将 composer/auth.json
文件恢复到其初始状态,因为较新版本的 composer 将识别新的密钥格式。
您可以尝试使用基本身份验证:
改变这个(oauth):
"github-oauth": {
"github.com": "ghp_[YOUR-PERSONAL-TOKEN]"
}
为此(基本身份验证):
"http-basic": {
"github.com": {
"username": "[YOUR-GITHUB-USERNAME]",
"password": "ghp_[YOUR-PERSONAL-TOKEN]"
}
}
您可以找到instructions on how to create a Personal Access Token
灵感来自 github docs。显然,在某些情况下,您可以使用带有个人访问令牌而不是 oauth 的基本身份验证(例如我的:使用 composer 安装私有 git repo)。
/root/.composer/auth.json
,然后它才能工作。
我修好了它。
转到 C:\Users\XXXXX\AppData\Roaming\Composer
打开 auth.json
删除“github-oauth”下的 github.com 条目:{}
而已。
github-auth
条目后,运行 composer self-update
,然后将删除的内容添加回文件中。
更新 Masiorama 和 Ruchir Mehta 的答案:如果您正在查找文件 auth.json 但不知道如何使用,请使用以下命令:
找到 auth.json
结果如下:您可以看到 auth.json 看起来像这样:
/home/{你的用户名}/.config/composer/auth.json
https://i.stack.imgur.com/mvnfA.png
然后你可以使用这个命令来编辑文件:
sudo gedit /home/dev/.config/composer/auth.json
https://i.stack.imgur.com/WTcZ8.png
如果您使用的是 MacOS,则 auth.json
文件位于 ~/.composer/auth.json
。然后,您可以从那里删除 github-oauth
的值。我尝试完全删除该文件,但出现解析错误 Expected one of: 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
。您的 auth.json
文件应如下所示:
{
"github-oauth": {}
}
这与发布的其他答案类似,但我无法在 MacOS 上使用 locate
命令,因此这可能对其他 Mac 用户有所帮助
这个错误最近突然出现。
只需删除整个身份验证文件对我有用..!不知道为什么/什么时候它首先出现。
~/.composer/auth.json
据我所知(我也是作曲家的初学者),问题出在您的身份验证上,因此您必须在 path-to-composer/.composer/ 内的 auth.json 中修复您的凭据
在里面你会发现一个可能看起来像这样的 json:
{
"github-oauth": {
"github.com": null
}
}
解决这个问题,你应该没问题;)
解决方案就是使用命令 composer self-update
升级您的 Composer 版本。
composer self-update
对我不起作用,尽管我认为过去确实如此,因为我看到我已经对这个答案投了赞成票。今天stackoverflow.com/a/68149438/470749有所帮助。
与 Paulina Khew 的答案相同的解决方案,但在 MacOS 上使用命令行:
cd ~/.composer/
nano auth.json
删除括号内的内容:
{
"github-oauth": {}
}
当您准备好保存文件时,按住 Ctrl key
并按字母 O
按键盘上的 Enter
键保存。
完成后,按 Ctrl + X
关闭 nano 并返回您的 shell。
转到 C:\Users\UserName\AppData\Roaming\Composer 打开 auth.json 文件。清除所有内容并粘贴以下代码
{
"bitbucket-oauth": {},
"github-oauth": {},
"gitlab-oauth": {},
"gitlab-token": {},
"http-basic": {},
"bearer": {}
}
我希望它会得到解决
将 githup api 令牌升级到新格式后,我遇到了同样的问题。答案是您需要升级 composer version 1.10.21 或更高版本才能解决此问题。
~/.composer/auth.json
=> 中删除密钥。 "github-oauth": {}
。然后,将 Composer 更新到所需的最新主要版本。例如,如果您需要版本 1:composer self-update --1
,您就可以开始了。
编辑作曲家身份验证配置文件 ~/.composer/auth.json
然后替换以下内容。
"http-basic": {
"github.com": {
"username": "[YOUR-GITHUB-USERNAME]",
"password": "ghp_[YOUR-PERSONAL-TOKEN]"
}
}
现在运行命令 composer install
那是一个错误。
如果你有 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
如果它不起作用,请将其写在评论中。
分步说明
您的 Composer 版本有一个错误:您可以保存一个有效的 GitHub 令牌,但是它无法再次读取该令牌,因为 Composer 认为您的 GitHub 令牌不能包含下划线或类似的东西。此外,奇怪的是 Composer 只检查了第二次它的语法。为什么?那是另一个故事。
修复很简单。您可以在 Composer 版本中临时禁用该错误验证。也因为 GitHub 是一项专有服务,它们的规范会随着时间而改变(正如你今天所展示的)。因此,不验证 GitHub 令牌的语法是有意义的。唯一应该对 GitHub 令牌进行硬验证的人是 GitHub 本身,而不是 Composer。
如果您通过 apt install composer
安装 Composer,您可能没有任何可用的更新,而且您肯定不能使用 self-update
,因为出于安全原因 Composer 是只读的(出于类似原因,您不应从 root
执行 Composer )。相反,您可以创建一个安全的热补丁来解决该特定问题。
要创建补丁,请创建一个名为 /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
并注释掉验证检查。
不定期副业成功案例分享
php /usr/local/bin/composer self-update
,它对我有用。{}
替换了我的~/.composer/auth.json
以通过错误。 stackoverflow.com/a/38746307/569976 谈到在哪里可以找到这个目录 YMMY~/.config/composer/auth.json
文件中删除github-oauth
行,运行 composer self-update 并将删除的行添加回 auth.json