发布到 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 中删除了 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\_logs19-07-30T19_31_01_598Z-debug.log

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

但是发布还是不行,不知道为什么。

编辑 2019 年 7 月 31 日:在我的活动领域列表中,我还有 npm Bearer Token 领域

当您执行 npm loginnpm adduser 时,NPM 客户端会创建一个身份验证令牌,该令牌将在以后向注册表发出请求时使用。默认 NXRM 配置仅允许 Local Authenticating Realm,它无法识别 NPM 的令牌。请确保您已激活 npm Bearer Token Realm

您需要在传入 npm adduser 的注册表 URL 末尾添加一个斜线,否则 npm 会截断 URL 的最后一段,并且它不会工作。

确保 _auth 令牌正确。就我而言,我更改了系统凭据并忘记生成新的 _auth 令牌。我得到了完全相同的错误,即 "npm 错误!代码 E401 错误!无法验证,需要:BASIC realm="Sonatype Nexus Repository Manager"

一旦我修复它,问题就解决了。 对于那些正在寻找生成 _auth 的命令的人。这是: btoa('username:userpassword')

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

我确实使用了来自 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 登录,查看 this life saving post

这两天我一直在为这个问题苦苦挣扎,最后的解决方案是从根(用户)目录中删除 .npmrc 文件。 当 npm 尝试登录时,它使用了此文件中的凭据并忽略了您的密码登录。

我的机器上安装了三个版本的节点。原来我后来安装的那些在 node_modules 文件夹中有自己的本地 .npmrc 文件。即使我删除了本地的,他们也没有使用全局的 .npmrc,所以我不得不复制它。

只需在 Nexus 仪表板中启用匿名 访问,它将从您的私人注册表中提取。

我遇到过类似的问题。我还将我们的凭据存储在我的用户目录中的 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 login。