解决 Public registration is not allowed 问题

在尝试发布npm包时遇到了npmERR!codeENEEDAUTH的错误,需要授权并登录。登录时提示公共注册不允许。分析发现registry配置为阿里云的npm镜像源。解决方案是将registry设置回npm官方源:npmconfigsetregistryhttps://registry.npmjs.org/。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

今天在发布npm包的时候,发现报错

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`

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/wliang/.npm/_logs/2023-03-15T07_09_33_625Z-debug.log

然后 npm login, 报错

😭😭😭 Public registration is not allowed 😭😭😭

原因分析:

使用npm config list,

; "user" config from /Users/wliang/.npmrc

//registry.npmjs.org/:_authToken = (protected) 
//repos.infervision.com/repository/npm-local/:_authToken = (protected) 
registry = "https://registry.npmmirror.com/" 

; node bin location = /Users/wliang/.nvm/versions/node/v16.13.1/bin/node
; cwd = /Users/wliang/myGithub/jstoolkit
; HOME = /Users/wliang
; Run `npm config ls -l` to show all defaults.

发现registry是阿里的镜像源,所以改为npm镜像源即可


解决方案:

npm config set registry https://registry.npmjs.org/
<think>好的,我现在需要解决用户遇到的“Public Key Retrieval is not allowed”错误。根据用户提供的引用内容,这个问题通常出现在连接MySQL数据库时,特别是使用DataGrip、DBeaver等工具的情况下。我需要先理解问题的原因,然后整理出解决方案。 首先,根据引用[2]和[3],这个错误的主要原因是MySQL 8.0默认使用了caching_sha2_password身份验证机制,而客户端可能不支持这种新的加密方式,或者禁用了SSL/TLS传输后,客户端无法获取服务器的公钥。引用[1]和[4]提到,解决方法包括修改用户认证方式、调整客户端连接参数等。 接下来,我需要综合这些信息,整理出清晰的解决步骤。用户可能需要不同的解决方法,比如临时解决或根本性解决。根据引用[3],方案一是修改用户的加密方式为mysql_native_password,而方案二是在连接参数中添加allowPublicKeyRetrieval=true。引用[4]也提到了类似的步骤,包括编辑驱动属性或更新URL参数。 需要注意的是,不同的客户端工具(如DataGrip、DBeaver)可能有不同的配置界面,但核心步骤应该是类似的。此外,用户可能需要考虑安全性问题,比如在生产环境中不建议禁用SSL,所以需要给出相应的建议。 另外,用户可能不太熟悉如何执行这些步骤,比如如何在MySQL中执行ALTER USER命令,或者在DataGrip中哪里找到驱动属性设置。因此,解答需要详细说明每一步的操作,避免用户产生困惑。 最后,要确保回答结构清晰,分点列出解决方法,并给出注意事项,帮助用户根据自身情况选择合适的方案。同时,生成的相关问题需要围绕这个错误的其他可能性或深入配置进行扩展,帮助用户进一步理解问题。</think>### 解决Public Key Retrieval is not allowed”错误的完整指南 此错误通常出现在使用客户端工具(如DataGrip、DBeaver)连接MySQL 8.0+数据库时,核心原因是客户端无法安全获取服务器公钥[^2][^3]。以下是三种主流解决方法: --- #### **方法一:修改用户身份验证方式(推荐长期方案)** 适用于需要彻底解决加密协议不兼容的情况: 1. 登录MySQL服务器命令行 2. 执行以下命令修改用户加密方式: ```sql ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'; ``` 例如: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; ``` *此操作将用户认证方式从`caching_sha2_password`改为旧版`mysql_native_password`*[^3] --- #### **方法二:配置客户端连接参数(快速临时方案)** 适用于开发环境快速修复,在客户端工具中配置: 1. **DataGrip/DBeaver设置步骤**: - 编辑数据库连接配置 - 在**驱动属性(Driver Properties)**中添加: ```properties allowPublicKeyRetrieval = true useSSL = false ``` - 或在连接URL末尾追加参数: ``` jdbc:mysql://host:port/db?allowPublicKeyRetrieval=true&useSSL=false ``` *注意:`useSSL=false`仅限非生产环境使用*[^1][^4] 2. **JDBC直连配置**: ```java String url = "jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false"; ``` --- #### **方法三:更新驱动与启用SSL(安全方案)** 适用于生产环境的安全实践: 1. 下载最新版MySQL Connector/J驱动(建议8.0.25+) 2. 在连接参数中启用SSL: ```properties useSSL = true requireSSL = true ``` 3. 配置服务器端SSL证书: ```ini [mysqld] ssl-ca=/path/to/ca.pem ssl-cert=/path/to/server-cert.pem ssl-key=/path/to/server-key.pem ``` --- #### **注意事项** 1. 生产环境禁用SSL可能导致中间人攻击风险[^4] 2. 修改`allowPublicKeyRetrieval`会降低安全校验级别 3. MySQL 8.0默认加密方式变更详见官方文档[^3] ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-wliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值