发布到 Nexus 上的私有 NPM 存储库时出现身份验证错误

Mih*_*sek 29 nexus node.js npm

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

我的 Nexus 设置是我有npm-proxynpm-registry(托管 npm with allowRepublish=false)、npm-snapshots(托管 npm with allowRepublish=true)和npm-public(与所有其他三个存储库分组)。

由于我正在开发一个库,我使用的是我的快照存储库,所以我可以不断地重新部署相同的版本(类似于 Maven 世界中的快照)。

在我的库项目中,我在package.json 中设置了这个选项

"publishConfig": {
    "registry": "https://my.nexus.com/repository/npm-snapshots/"
}
Run Code Online (Sandbox Code Playgroud)

接下来,我创建了包含以下内容的.npmrc文件:

registry=https://my.nexus.com/repository/npm-public/
_auth=RVhBTVBMRQ==
Run Code Online (Sandbox Code Playgroud)

有了这个设置,我可以毫无问题地发布项目。但是,让我烦恼的是,我的密码(只是 base64 编码)存储在文件中,应该提交,但由于其中的凭据,我无法提交。

我试图改为登录 npm 注册表并从 .npmrc 中删除了 auth 行 npm adduser --registry=https://my.nexus.com/repository/npm-snapshots --always-auth

我得到了回应 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
Run Code Online (Sandbox Code Playgroud)

现在在我的另一个项目(使用这个库)中,我简单地创建了 .npmrc 文件,其中包含内容registry=https://nexus.mjamsek.com/repository/npm-public/和运行命令,npm adduser --registry=https://my.nexus.com/repository/npm-public --always-auth并且能够下载已发布的包。

但是,发布仍然不起作用,我不知道为什么。

编辑 31.7.2019:在我的活动领域列表中,我也有npm Bearer Token Realm

Daw*_*awa 34

当你npm login还是npm adduser故宫客户端创建令牌认证今后将请求发送到注册表中。默认的 NXRM 配置只允许不识别 NPM 令牌的本地身份验证领域。请确保您已启用npm Bearer Token Realm

在此处输入图片说明


rse*_*don 24

您需要在传递给 的注册表 URL 的末尾添加一个斜杠npm adduser,否则npm会截断 URL 的最后一段,并且将无法工作。

  • 年度最佳答案!+100000000000000000000000 (3认同)

小智 7

_auth=替换为 的输出btoa('username:userpassword'),它对我有用。

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

在此输入图像描述


小智 7

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

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

理想情况下删除任何多余的内容,事先备份,在我的情况下,我的文件仅包含:

strict-ssl=false

然后你 npm login --registry=https://my.nexus.com/repository/npm-public/又可以了。

如果这不起作用,您还可以使用 curl 绕过 npm 登录,请查看这篇救命帖子