Redis:错误的“auth”命令参数数量

den*_*xic 3 redis node.js node-redis

我正在使用redisnodejs。版本:"redis": "^3.1.2"

当我的服务器连接到 redis 时,出现以下错误:

ERR wrong number of arguments for 'auth' command
Run Code Online (Sandbox Code Playgroud)

我猜它与 URL 有关系,它看起来像这样:

redis://h:<password>@<url>:<port>
Run Code Online (Sandbox Code Playgroud)

我的 redis 由 Heroku 托管,我无法更改 URL。并且不知道我怎样才能让它工作。非常感谢任何想法/解决方案。

rit*_*ITW 7

Redis 版本 < 6.0.0 和node-redis >=3.1.0 ,redis://h:<password>@<url>:<port>将不起作用并抛出ERR wrong number of arguments for 'auth' command

解决方案:redis://<password>@<url>:<port>有效,即:从 URL 中删除用户名

这应该可以解决您面临的问题。

对于其他版本:

Redis 版本 < 6.0.0 和node-redis <=3.0.2 ,redis://h:<password>@<url>:<port>有效。

Redis 版本 >= 6.0.0 和 node-redis(任何版本),两者redis://<username>:<password>@<url>:<port>(当 redis ACL 中的用户名设置为自定义用户名时)并且 redis://<password>@<url>:<port>都可以工作。

原因是:

  • node-redis 根据releasenote进行了更改以支持 Redis-6 。

  • Redis-6 支持 ALC 中的用户名。在 v6 之前,Redis 没有包含用户的概念,唯一的认证策略是单一登录密码。参考

  • 每当您将 Redis 插件附加到 Heroku 容器时,都会设置环境变量 REDIS_URL 并且值是格式为:的连接 URL redis://h:<password>@<url>:<port>。这个“h”是一个假/虚拟/占位符用户名,因为一些客户端(例如:node-redis)无法正确处理 URL 中的空白用户名。在 Redis 6 中发布 ACL 后,客户端开始支持使用 2 个参数(用户名和密码)的新 AUTH 命令。尝试将 h 用户名传递给 AUTH 的客户端将在 Redis 版本 4 和 5 上导致上述错误。参考

  • 只是一条评论,解决方案:`redis://&lt;password&gt;@&lt;url&gt;:&lt;port&gt;` 有效,即:从 URL 中删除用户名。应该是: 解决方案: `redis://:&lt;password&gt;@&lt;url&gt;:&lt;port&gt;` 有效,即:从 URL 中删除用户名。密码前需要有一个“:”。 (7认同)
  • 我们刚刚遇到这个问题,因为“promise-redis”(目前不推荐)包含带有“*”依赖解析的“node-redis”。我们现在运行的是 Redis 5.0,因此从 3.0 更新到 3.1 的一个完全不相关的更改破坏了我们的 AUTH 命令及其中的用户名。感谢您的精彩解释! (2认同)
  • @shernshiou 你是对的: `redis://:&lt;password&gt;@&lt;url&gt;:&lt;port&gt;` 对我来说效果很好 (2认同)