发布到 Nexus 上的私有 NPM 存储库时出现身份验证错误
Authentication error on publishing to private NPM repository on Nexus
我在发布到我的私有 Nexus 上托管的私有 npm 注册表时遇到身份验证问题。
我的 Nexus 设置是 npm-proxy,npm-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 login
或 npm 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。
我在发布到我的私有 Nexus 上托管的私有 npm 注册表时遇到身份验证问题。
我的 Nexus 设置是 npm-proxy,npm-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 login
或 npm 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。