[英]Installing packages from github npm registry - auth error 401
我剛剛在 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"
我如何添加/獲得此特權?
除了在 npm 配置中設置注冊表之外,您還需要在 Github 上生成個人訪問令牌並將其添加到您的 npm 配置中:
https://github.com/settings/tokens
(設置 > 開發人員設置 > 個人訪問令牌),您應該會看到如下內容:Generate new token
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 }}
這對我有用
C:\Program Files\nodejs\node_modules\npm\npmrc
在此處更新文件,您的錯誤將得到解決
我一直在努力弄清楚為什么 .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.