Composer [UnexpectedValueException]错误将尝试使用composer来安装github项目

时间:2014-11-01 18:32:13

标签: composer-php

我正在尝试使用composer安装github项目并获得以下错误

Composer [UnexpectedValueException] 您的github.com的Github oauth令牌包含无效字符:“”

任何人都可以解释我需要做些什么来纠正这个错误吗?

我正在使用以下命令

composer create-project --prefer-dist --stability = dev vova07 / yii2-start yii2-start

谢谢

12 个答案:

答案 0 :(得分:46)

我开始收到类似的错误,原因是 Github 最近更改了他们的身份验证令牌的格式:

https://github.blog/changelog/2021-03-31-authentication-token-format-updates-are-generally-available/

解决错误:

  1. 找到 composer/auth.json 文件(如果您在容器中运行该项目,则必须重击该文件并在其中找到该文件)
  2. 删除其 github.com 条目。删除条目后,您的文件可能如下所示:{"github-oauth": {}}
  3. 运行 self-update 作曲家。该问题已在版本 2.0.12 中得到解决。在此处查看该版本的变更日志中的第一项:https://getcomposer.org/changelog/2.0.12

之后,您可以将 composer/auth.json 文件恢复到其初始状态,因为较新版本的 composer 将识别新的密钥格式。

答案 1 :(得分:41)

您可以尝试使用基本身份验证:

更改此(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 存储库)。

答案 2 :(得分:7)

更新 Masiorama 和 Ruchir Mehta 的答案:

如果您要查找文件 auth.json 但不知道如何查找,请使用以下命令:

<块引用>

找到 auth.json

结果如下:
您可以看到 auth.json 将如下所示:

<块引用>

/home/{您的用户名}/.config/composer/auth.json

enter image description here

然后你可以使用这个命令来编辑文件:

<块引用>

sudo gedit /home/dev/.config/composer/auth.json

并删除 github-oauth 中的内容。 enter image description here


希望能帮到你。

答案 3 :(得分:5)

如果您使用的是 MacOS,则 auth.json 文件位于 ~/.composer/auth.json。然后,您可以删除 github-oauth 的值。我尝试完全删除该文件,但出现解析错误 Expected one of: 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['。您的 auth.json 文件应如下所示:

{
        "github-oauth": {}
}

这与发布的其他答案类似,但我无法在 MacOS 上使用 locate 命令,因此这可能对其他 Mac 用户有所帮助

答案 4 :(得分:4)

这个错误最近突然出现。

只需删除整个 auth 文件对我有用..!不知道为什么/什么时候它首先出现。

~/.composer/auth.json

答案 5 :(得分:2)

解决方案只是升级您的 Composer 版本 使用命令 composer self-update

答案 6 :(得分:1)

据我所知(我也是作曲家的初学者),问题在于您的身份验证,因此您必须在路径到作曲家/ .composer /

在里面你会发现一个可能看起来像的json:

{
  "github-oauth": {
    "github.com": null
  }
}

修复此问题,你应该没问题;)

答案 7 :(得分:1)

我修复了。

转到C:\ Users \ XXXXX \ AppData \ Roaming \ Composer

打开auth.json

在“ github-oauth”下删除github.com条目:{}

就是这样。

答案 8 :(得分:0)

与 Paulina Khew 的答案相同的解决方案,但在 MacOS 上使用命令行:

cd ~/.composer/
nano auth.json

删除括号内的内容:

{
        "github-oauth": {}
}

当您准备好保存文件时,按住 Ctrl key 并按字母 O

按键盘上的 Enter 键进行保存。

完成后,按 Ctrl + X 关闭 nano 并返回到您的外壳。

答案 9 :(得分:0)

这是一个错误。

如果你有 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

如果它不起作用,可能您没有通过 composer 安装 apt


简而言之,无论使用何种操作系统和安装方法,请在 Composer 中找到文件 BaseIO.php 并注释掉验证检查。

答案 10 :(得分:0)

转到 C:\Users\UserName\AppData\Roaming\Composer 打开 auth.json 文件。 清除所有内容并粘贴以下代码

{
"bitbucket-oauth": {},
"github-oauth": {},
"gitlab-oauth": {},
"gitlab-token": {},
"http-basic": {},
"bearer": {}
}

希望能解决

答案 11 :(得分:0)

在将 githup api 令牌升级到新格式后,我遇到了同样的问题。 答案是您需要升级 composer version 1.10.21 或更高版本才能解决此问题。