【问题标题】:Composer [UnexpectedValueException] error will trying to use composer to install a github projectComposer [UnexpectedValueException] 错误将尝试使用 composer 安装 github 项目
【发布时间】:2014-12-28 18:39:41
【问题描述】:

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

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

谁能解释我需要做什么来纠正这个错误?

我正在使用以下命令

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

谢谢

【问题讨论】:

标签: composer-php


【解决方案1】:

据我所知(我也是 composer 的初学者),问题在于您的身份验证,因此您必须在 path-to-composer/.composer/ 内的 auth.json 中修复您的凭据

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

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

解决这个问题,你应该没问题;)

【讨论】:

  • 如果您不知道如何手动修复,更简单的解决方案是完全擦除 auth.json。这样,它会在您下次准备项目时尝试重新创建凭据。 ;)
  • 对于那些在 linux 上查看上述路径的人:` ~/.config/composer/auth.json` 今天为找到这个做了很多努力:)
  • 我已经评论了这个答案的更新,请检查。
【解决方案2】:

我修好了。

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

打开 auth.json

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

就是这样。

【讨论】:

  • Composer 似乎对令牌进行了相当激进的验证。如此激进,以至于将我的 GitHub 令牌更新为新格式给我带来了这个错误。我正在运行 Composer 2.0.8,我必须删除令牌并更新到 Composer 2.0.12 并重新应用令牌。
  • @NiklasEkman 你是怎么解决的?我尝试删除 github.com 但它不起作用。你能看一下你的结构吗?
  • @Thiago 按照上面答案中的说明进行操作。删除 github-auth 条目后,运行 composer self-update,然后将删除的内容添加回文件中。
  • 我已经评论了这个答案的更新,请检查。
  • 指定位置不存在文件。
【解决方案3】:

我开始遇到类似的错误,原因是 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. 运行composer self-update。该问题已在版本 2.0.12 中得到解决。在此处查看该版本更改日志中的第一项:https://getcomposer.org/changelog/2.0.12

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

【讨论】:

  • 即使我尝试自我更新,我也会遇到同样的错误,我什么也做不了
  • 自更新成功了吗?因为这对我有用。
  • 我只需要在运行项目的容器中运行以下命令:php /usr/local/bin/composer self-update,它对我有用。
  • 我用{} 替换了我的~/.composer/auth.json 以通过错误。 stackoverflow.com/a/38746307/569976 谈论在哪里可以找到这个目录 YMMY
  • @DarkteK 从~/.config/composer/auth.json 文件中删除github-oauth 行,运行composer self-update 并将删除的行添加回auth.json
【解决方案4】:

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

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

【讨论】:

  • 除非您可以将 Composer 更新到 v2,否则这是唯一可行的解​​决方案。谢谢!
  • 为我工作,我必须使用 vim 之类的编辑器在我的 Docker 容器(不是在我的 PC 上)中更新文件 /root/.composer/auth.json,然后它才能工作。
  • 它在更新 .compoer/auth.json 后对我有用
【解决方案5】:

Masiorama 和 Ruchir Mehta 的更新答案:

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

找到 auth.json

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

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

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

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

并删除 github-oauth 中的内容。

【讨论】:

    【解决方案6】:

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

    {
            "github-oauth": {}
    }
    

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

    【讨论】:

      【解决方案7】:

      这个错误最近突然从哪里冒出来。

      只需删除整个身份验证文件对我有用..!不知道为什么/什么时候出现。

      ~/.composer/auth.json

      【讨论】:

        【解决方案8】:

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

        cd ~/.composer/
        nano auth.json
        

        删除括号内的内容:

        {
                "github-oauth": {}
        }
        

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

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

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

          • 今天composer self-update 对我不起作用,尽管我认为它过去确实如此,因为我看到我已经赞成这个答案。今天stackoverflow.com/a/68149438/470749 帮忙了。
          【解决方案10】:

          这是一个错误。

          如果你有 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 并注释掉验证检查。

          【讨论】:

            【解决方案11】:

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

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

            希望能解决

            【讨论】:

            • 这解决了我的问题。谢谢老哥!
            【解决方案12】:

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

            【讨论】:

            • 要提供更多详细信息,首先,从文件~/.composer/auth.json => "github-oauth": {} 中删除密钥。然后,将 Composer 更新到所需的最新主要版本。例如,如果您需要版本 1:composer self-update --1,您就可以开始了。
            • 解决方案是更改身份验证方法,如下所示:stackoverflow.com/a/67041384/2377961
            猜你喜欢
            • 2016-11-14
            • 2015-07-21
            • 2014-07-07
            • 2017-07-23
            • 2016-03-10
            • 2015-06-04
            • 1970-01-01
            • 2020-10-06
            相关资源
            最近更新 更多