簡體   English   中英

發布到 Nexus 上的私有 NPM 存儲庫時的身份驗證錯誤

[英]Authentication error on publishing to private NPM repository on Nexus

發布到我的私有 Nexus 上托管的私有 npm 注冊表時,我遇到了身份驗證問題。

我的 Nexus 設置是我有npm-proxynpm-registry (使用allowRepublish=false托管 npm)、 npm-snapshots (使用allowRepublish=true托管 npm)和npm-public (與所有其他三個存儲庫組)。

由於我正在開發一個庫,因此我正在使用我的快照存儲庫,因此我可以不斷地重新部署相同的版本(類似於 maven 世界中的快照)。

在我的庫項目中,我在package.json 中設置了這個選項

"publishConfig": {
    "registry": "https://my.nexus.com/repository/npm-snapshots/"
}

接下來,我創建了具有以下內容的.npmrc文件:

registry=https://my.nexus.com/repository/npm-public/
_auth=RVhBTVBMRQ==

通過這個設置,我可以毫無問題地發布項目。 但是,困擾我的是,我的密碼(只是 base64 編碼)存儲在文件中,應該提交,但由於其中的憑據,我無法提交。

我試圖改為登錄到 npm 注冊表並從 .npmrc npm adduser --registry=https://my.nexus.com/repository/npm-snapshots --always-auth刪除了 auth 行

Logged in as myusername on https://my.nexus.com/repository/npm-snapshots.我的用戶名Logged in as myusername on https://my.nexus.com/repository/npm-snapshots.得到響應Logged in as myusername on https://my.nexus.com/repository/npm-snapshots.

但是,當我嘗試運行npm publish我得到:

npm ERR! code E401
npm ERR! Unable to authenticate, need: BASIC realm="Sonatype Nexus Repository Manager"
npm verb exit [ 1, true ]
npm timing npm Completed in 6867ms

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\XXXX\AppData\Roaming\npm-cache\_logs\2019-07-30T19_31_01_598Z-debug.log

現在在我的另一個項目(正在使用這個庫)中,我只是創建了帶有內容registry=https://nexus.mjamsek.com/repository/npm-public/ .npmrc 文件並運行命令npm adduser --registry=https://my.nexus.com/repository/npm-public --always-auth我能夠下載已發布的包。

但是,發布仍然無法正常工作,我不知道為什么。

編輯 31.7.2019:在我的活動領域列表中,我還有npm Bearer Token Realm

當您執行npm loginnpm adduser ,NPM 客戶端會創建一個身份驗證令牌,該令牌將在以后對注冊表的請求中使用。 默認的 NXRM 配置只允許不識別 NPM 令牌的本地身份驗證領域 請確保您已啟用npm Bearer Token Realm

在此處輸入圖片說明

您需要在傳遞給npm adduser的注冊表 URL 的末尾添加一個斜杠,否則npm將截斷 URL 的最后一段,並且它將無法工作。

_auth=替換為btoa('username:userpassword') ,它對我_auth=

我確實使用了 chrome 中的這個 btoa,如下所示。

在此處輸入圖片說明

我今天遇到了這個問題,我的解決方案是從我的 npmrc 文件中刪除所有注冊表項:

registry=https://my.nexus.com/repository/npm-snapshots/

理想情況下刪除任何多余的東西,事先備份,在我的情況下,我的文件只包含:

strict-ssl=false

然后你可以再次npm login --registry=https://my.nexus.com/repository/npm-public/

如果這不起作用,您還可以使用 curl 繞過 npm login,請查看此救命帖子

確保 _auth 令牌正確。 就我而言,我更改了系統憑據並忘記生成新的 _auth 令牌。 我收到了完全相同的錯誤,即“npm ERR!代碼 E401 npm ERR!無法進行身份驗證,需要:BASIC realm="Sonatype Nexus Repository Manager”

一旦我修復它,問題就解決了。 對於那些正在尋找生成 _auth 命令的人。 它是: btoa('用戶名:用戶密碼')

前兩天我一直在為這個問題苦苦掙扎,最后的解決方案是從根(用戶)目錄中刪除 .npmrc 文件。 當 npm 嘗試登錄時,它使用此文件中的憑據並忽略您的密碼登錄。

我已經在我的機器上使用了三個版本的節點。 事實證明,我后來安裝的那些在 node_modules 文件夾中有自己的本地 .npmrc 文件。 即使我刪除了本地的,他們也沒有使用全局的 .npmrc,所以我不得不復制它。

我有過類似的問題。 我還將我們的憑據存儲在我的用戶目錄中的 npmrc 文件中。 使用 node16/npm7 設置時,我會收到錯誤

npm ERR! code ENEEDAUTH
npm ERR! need auth This command requires you to be logged in.
npm ERR! need auth You need to authorize this machine using `npm adduser`

如果我使用 nvm 降級到 node12/npm6,它可以工作。 我更喜歡不降級的有效解決方案,但現在它讓我繼續前進。

我有同樣的問題,我的解決方案是刪除我的全局 .npmrc 文件,然后登錄 npm 登錄。

只需在 nexus 儀表板中啟用匿名訪問,它就會從您的私人注冊表中提取。

暫無
暫無

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

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