从github npm注册表安装软件包- auth error 401

hrysbysz  于 2022-12-19  发布在  Git
关注(0)|答案(7)|浏览(168)

我刚刚在GitHub上发布了一个私有软件包,试图弄清楚它应该如何工作。现在我正在尝试将它安装到另一个项目中。我使用npm login --registry=https://npm.pkg.github.com进行了身份验证,使用的访问令牌具有write:packagesread:packagesrepo权限。当尝试运行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"

如何添加/获取此特权?

xwbd5t1u

xwbd5t1u1#

除了在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 Packages documentation
相关:对于Github操作,请注意GITHUB_TOKEN和个人访问令牌之间的区别。Github令牌的权限仅限于包含您的工作流的存储库。对于其他任何内容(包括超出Github令牌所允许的粒度权限),您需要个人访问令牌。

hgqdbh6s

hgqdbh6s2#

显然我是一个白痴谁不能阅读文档,错过了这一部分:
package.json文件所在的目录中,创建或编辑.npmrc文件,使其包含指定GitHub Packages URL和帐户所有者的行。将OWNER替换为拥有包含您项目的存储库的用户或组织帐户的名称。
registry=https://npm.pkg.github.com/OWNER

7jmck4yq

7jmck4yq3#

还有一件事需要检查(我花了一段时间才意识到):
我得到了指定的错误:

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

即使我认为我正确地为GITHUB令牌提供了所需的权限。
我已经将github操作设置为设置来自名为GPR_PRIVATE_READ_TOKEN的组织机密的NODE_AUTH_TOKEN,它在另一个repo中工作。
原来问题是这个秘密被定义为只对私有仓库可用,而我试图在公共仓库中使用它。当我把这个秘密提供给公共仓库时,一切都正常了。
我的工作流作业看起来像这样(我显示了安装步骤之前的所有步骤,以防有人看到它有帮助):

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 }}
sqougxex

sqougxex4#

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

92vpleto

92vpleto5#

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

eit6fx6z

eit6fx6z6#

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

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

上面的secrets.TOKEN指的是我为需要访问github包的仓库创建的仓库密码:(存储库〉设置〉安全性〉机密〉操作)x1c 0d1x
这个秘密的值是从我为自己创建的一个只有read:packages作用域的个人访问令牌中复制的:(用户设置〉开发者设置〉个人访问令牌〉令牌(经典))

看到它检测到这个令牌的使用也让人放心!
最后,我的.npmrc文件包含:

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

我用的是我自己的用户名而不是组织名称,因为这对我来说是有效的。我想我可以在升级到Github Enterprise时使用组织名称。

fhg3lkii

fhg3lkii7#

这就是我的工作
第一个月
更新文件在这里&你的错误将被解决

相关问题