Node.js 发布到Nexus上的专用NPM存储库时发生身份验证错误

Node.js 发布到Nexus上的专用NPM存储库时发生身份验证错误,node.js,npm,nexus,Node.js,Npm,Nexus,当发布到我的私有Nexus上托管的私有npm注册表时,我遇到身份验证问题 我的Nexus设置是我有npm代理,npm注册表(托管npm时使用allowRepublish=false),npm快照(托管npm时使用allowRepublish=true)和npm公共(与所有其他三个存储库一起分组) 因为我正在开发一个库,所以我正在使用我的快照存储库,所以我可以不断地重新部署相同的版本(类似于maven world中的快照) 在我的库项目中,我在package.json中设置了此选项 "p

当发布到我的私有Nexus上托管的私有npm注册表时,我遇到身份验证问题

我的Nexus设置是我有npm代理npm注册表(托管npm时使用
allowRepublish=false
),npm快照(托管npm时使用
allowRepublish=true
)和npm公共(与所有其他三个存储库一起分组)

因为我正在开发一个库,所以我正在使用我的快照存储库,所以我可以不断地重新部署相同的版本(类似于maven world中的快照)

在我的库项目中,我在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中删除了auth行
npm adduser——注册表=https://my.nexus.com/repository/npm-snapshots --始终进行身份验证

我得到响应
以我的用户名登录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
现在在我的另一个项目(使用这个库)中,我只是用content
registry创建了.npmrc文件=https://nexus.mjamsek.com/repository/npm-public/
并运行命令npm adduser--registry=https://my.nexus.com/repository/npm-public --始终进行身份验证,我可以下载已发布的软件包

然而,这篇文章仍然不起作用,我也不知道为什么


编辑2019年7月31日:在我的活动领域列表中,当您进行
npm登录
npm adduser
时,我还拥有npm承载令牌领域

,npm客户端将创建一个身份验证令牌,该令牌将在将来请求注册表时使用。默认NXRM配置只允许不识别NPM令牌的本地身份验证域。请确保您的npm承载令牌领域处于活动状态


您需要在传递到
npm adduser
的注册表URL末尾添加一个尾随斜杠,否则
npm
将切掉URL的最后一段,它将不起作用。

请确保_auth令牌正确无误。在我的例子中,我更改了系统凭据,忘记生成新的身份验证令牌。我得到了完全相同的错误,即。 “npm错误!代码E401 npm错误!无法进行身份验证,需要:BASIC realm=“Sonatype Nexus存储库管理器”

一旦我修好了,问题就解决了。 对于那些正在寻找生成_auth的命令的用户,它是:
btoa('username:userpassword')
\u auth=
替换为
btoa('username:userpassword')
的输出,它对我有效

我确实使用了chrome的btoa,如下所示


我今天遇到了这个问题,我的解决方案是从我的npmrc文件中删除所有注册表项:

注册表=https://my.nexus.com/repository/npm-snapshots/

理想情况下,删除任何多余的内容,并在备份之前进行备份,在我的情况下,我的文件仅包含:

strict ssl=false

那你可以
npm登录--注册表=https://my.nexus.com/repository/npm-public/
请再说一遍


如果这不起作用,您也可以使用curl绕过npm登录,请看。

我在过去两天一直在努力解决这个问题,最后的解决方案是从root(用户)目录中删除.npmrc文件。
当npm尝试登录时,它使用了此文件中的creds并忽略了您的pass登录。

Hi,我已经在活动领域列表中列出了此项,我更新了问题。您需要在传递到“npm adduser”的注册表URL末尾添加一个尾斜杠,否则npm将切掉URL的最后一段,它将无法工作。确实,这就是问题所在,谢谢。如果你把它作为答案写下来,我会接受的。年度最佳答案+100000000000000000000000