使用 auth username/password nodejs 连接到托管 redis

Connecting to managed redis with auth username/password nodejs

编辑:在思考这个问题之后,真正的问题是使用 tls 连接到 digitalocean 的托管 redis 和 node-redis 的例子是什么?

我可以使用用户名/密码与 redisinsight GUI 客户端正常连接,但无法与 nodejs 连接。它在同一台计算机上,因此没有防火墙问题。

var redis = require('redis');
var client = redis.createClient(process.env.REDIS_PORT, process.env.REDIS_URL, {no_ready_check: true});
client.auth('password', function (err) {
    if (err) {
      console.log(err);
      return
    }
    console.log('auth')
});

我很困惑的一件事是在哪里输入用户名?它只是 'default' 但 node_redis 的文档没有提供在身份验证期间提供用户名的方法。

错误是:AbortError: Redis connection lost and command aborted. It might have been processed.

这是我的工作轻微匿名 redisinsight 连接屏幕。

如何在 node-redis 中做同样的事情?

AUTH命令,如the docs所述:

When ACLs are used, the single argument form of the command, where only the password is specified, assumes that the implicit username is "default".

因此,即使您使用的是支持更多用户的 Redis 6,您对 default 的身份验证也应该有效。

您看到的错误是连接断开的结果,例如你不知何故失去了与 Redis 服务器的连接。 node-redis 正在处理两种情况之一(或两种情况)- 连接已超时或重新连接尝试已超过配置中指定的最大次数。我会仔细检查您的连接信息以及您的 redis 服务器是如何配置的。

我看到你在使用 TLS,你可能会发现这个有用:

如果你想用不同的用户验证 node-redis 客户端,当使用 Redis 6 时,你将不得不使用 send_command,但在你需要之前 删除 当前 AUTH 命令,因为当前 node-redis 不支持新命令 AUTH <username> <password>.

client['auth'] = null;
client.send_command('AUTH', ['<username>', '<password>'], redis.print);