簡體   English   中英

從 github npm 注冊表安裝包 - 身份驗證錯誤 401

[英]Installing packages from github npm registry - auth error 401

我剛剛在 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"

我如何添加/獲得此特權?

除了在 npm 配置中設置注冊表之外,您還需要在 Github 上生成個人訪問令牌並將其添加到您的 npm 配置中:

  • 在 Github 中導航到https://github.com/settings/tokens (設置 > 開發人員設置 > 個人訪問令牌),您應該會看到如下內容:

在此處輸入圖像描述

  • 單擊Generate new token
  • 從權限 select 至少read:packages

在此處輸入圖像描述

  • 單擊Generate token並復制令牌

  • 將以下內容添加到本地.npmrc

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

請參閱相關的Github 包文檔

相關:對於 Github 操作,請注意GITHUB_TOKEN和個人訪問令牌之間的區別。 Github 令牌的權限僅限於包含您的工作流的存儲庫 對於其他任何事情(包括超出 Github 令牌所允許的細粒度權限),您需要一個個人訪問令牌。

顯然我是一個白痴,無法閱讀文檔並錯過了那部分:

In the same directory as your package.json file, create or edit an .npmrc file to include a line specifying GitHub Packages URL and the account owner. 將 OWNER 替換為擁有包含您的項目的存儲庫的用戶或組織帳戶的名稱。

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

要檢查的另一件事(這花了我一段時間才意識到):

我收到了指定的錯誤:

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

即使我認為我正確地提供了具有所需權限的 GITHUB TOKEN。

我已將 github 操作設置為從名為NODE_AUTH_TOKEN的組織機密中設置 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 }}

如果您的問題仍然存在,請確保您的 package 名稱格式正確。

在此處輸入圖像描述

這對我有用

C:\Program Files\nodejs\node_modules\npm\npmrc

在此處更新文件,您的錯誤將得到解決

上面的答案是我的解決方案。 更新的版本記錄. 此外,我必須確保我的 PAT(個人訪問令牌)有權訪問我的組織存儲庫。

我一直在努力弄清楚為什么 .npmrc 文件只有在我將我的 PAT 以明文形式放在文件中時才能工作,這看起來很愚蠢。 解決方法是將“TOKEN”環境變量設置為工作流文件的一部分:我有:

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

上面的secrets.TOKEN指的是我為需要訪問github包的倉庫創建的一個Repository secret:(Repository > Settings > Security > Secrets > Actions) 在此處輸入圖像描述

這個秘密的值是從我為自己創建的個人訪問令牌復制的,它只有read:packages范圍:(用戶設置>開發人員設置>個人訪問令牌>令牌(經典)) 在此處輸入圖像描述

看到它檢測到此令牌的使用也令人放心!

最后,我的.npmrc文件包含:

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

我使用的是我自己的用戶名,而不是適合我的組織名稱。 我想我可以在升級到 Github Enterprise 時使用組織名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM