从 github npm 注册表安装软件包 - 身份验证错误 401

问题描述 投票:0回答:7

我刚刚在 GitHub 上发布了一个私有包,试图弄清楚它应该如何工作。现在我正在尝试将其安装在另一个项目中。我使用具有

npm login --registry=https://npm.pkg.github.com
write:packages
read:packages
权限的访问令牌对
repo
进行了身份验证。在尝试运行
npm install https://npm.pkg.github.com/@orgname/package-name
时,我收到一条错误消息:

npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"

如何添加/获得此权限?

github npm npm-install npm-login
7个回答
108
投票

除了在 npm 配置中设置注册表之外,您还需要在 Github 上生成个人访问令牌并将其添加到您的 npm 配置中:

  • 点击
    Generate new token
  • 从权限中至少选择
    read:packages

  • 点击

    Generate token
    并复制令牌

  • 将以下内容添加到本地

    .npmrc

    @${OWNER}:registry=https://npm.pkg.github.com
    //npm.pkg.github.com/:_authToken=${TOKEN}
    

请参阅相关的 Github 包文档

相关:对于 Github Actions,请注意

GITHUB_TOKEN
和个人访问令牌之间的区别。 Github 令牌的权限仅限于包含您的工作流程的存储库。对于其他任何事情(包括超出 Github 令牌允许的细化权限),您需要个人访问令牌。


27
投票

显然我是个白痴,无法阅读文档并错过了那部分:

package.json
文件所在的同一目录中,创建或编辑
.npmrc
文件以包含指定 GitHub Packages URL 和帐户所有者的行。将 OWNER 替换为拥有包含您的项目的存储库的用户或组织帐户的名称。

registry=https://npm.pkg.github.com/OWNER


5
投票

还有一件事要检查(这花了我一段时间才意识到):

我收到指定的错误:

npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"

尽管我认为我正确地提供了具有所需权限的 GITHUB TOKEN。

我已将 github 操作设置为从名为

NODE_AUTH_TOKEN
的组织秘密中设置
GPR_PRIVATE_READ_TOKEN
,该组织秘密正在另一个存储库中工作。

事实证明问题是秘密被定义为仅适用于私有存储库,而我试图在公共存储库中使用它。当我将秘密提供给公共存储库时,一切都正常了。

我的工作流程工作如下所示(我显示了安装步骤之前的所有步骤,以防对某人有帮助):

jobs:
  ci:
    name: Run Tests
    steps:
      - name: Use Node.js 12.x
        uses: actions/setup-node@v1
        with:
          node-version: 12.x
          registry-url: https://npm.pkg.github.com/

      - uses: actions/checkout@v2

      - name: Install dependencies based on package-lock.json
        run: npm ci
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GPR_PRIVATE_READ_TOKEN }}

3
投票

我一直在努力弄清楚为什么 .npmrc 文件只有在我将 PAT 以明文形式放入文件中时才有效,这看起来很愚蠢! 修复方法是将“TOKEN”环境变量设置为工作流程文件的一部分。我有:

      - run: npm install
        env:
          TOKEN: ${{ secrets.TOKEN }}

上面的

secrets.TOKEN
指的是我为需要访问github包的存储库创建的存储库秘密: (存储库 > 设置 > 安全 > 机密 > 操作)

这个秘密的值是从我为自己创建的个人访问令牌复制的,该令牌仅具有

read:packages
范围: (用户设置 > 开发者设置 > 个人访问令牌 > 令牌(经典))

看到它检测到此令牌的使用也令人放心!

最后,我的

.npmrc
文件包含:

@shiraze:registry=https://npm.pkg.github.com/
//npm.pkg.github.com/:_authToken=${TOKEN}

我使用自己的用户名而不是适合我的组织名称。我想升级到 Github Enterprise 时可以使用组织名称。


1
投票

如果您的问题仍然存在,请确保您的包名称格式正确。


0
投票

上面的答案是我的解决方案。更新版本记录为as。 此外,我必须确保我的 PAT(个人访问令牌)有权访问我的组织存储库。


0
投票

使用此处提到的所有措施(

.npmrc
、个人访问令牌等),我无法将我的私人包发布到组织帐户。一直都是401返回。 10 分钟前,我使用 PAT 从该私人存储库安装了软件包,没有任何问题。

显式登录注册表有帮助:

npm login --registry https://npm.pkg.github.com
Username: <your-github-username-or-organization-name>
Password: <your-github-personal-access-token>

什么给予。

© www.soinside.com 2019 - 2024. All rights reserved.