Conexión a redis administrado con nombre de usuario / contraseña de autenticación nodejs

Aug 15 2020

Editar: Después de pensar en el problema, la pregunta real es ¿cuál es un ejemplo de conexión a los redis administrados de digitalocean con node-redis usando tls?

Puedo conectarme bien con el cliente GUI de redisinsight usando nombre de usuario / contraseña, pero no puedo conectarme con nodejs. Está en la misma computadora, por lo que no hay problemas de firewall.

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')
});

Una cosa que me confunde es dónde ingresar el nombre de usuario. Es simplemente 'predeterminado', pero la documentación de node_redis no proporciona una forma de proporcionar un nombre de usuario durante la autenticación.

El error es: AbortError: Redis connection lost and command aborted. It might have been processed.

Aquí está mi pantalla de conexión redisinsight en funcionamiento, ligeramente anonimizada.

¿Cómo hago lo mismo en node-redis?

Respuestas

2 LeoMurillo Aug 16 2020 at 07:36

El AUTHcomando, como se indica en los documentos :

Cuando se utilizan ACL, la forma de argumento único del comando, donde solo se especifica la contraseña, asume que el nombre de usuario implícito es "predeterminado".

Entonces, incluso si está utilizando Redis 6, donde se admiten usuarios adicionales, su autenticación para defaultdebería funcionar.

El error que está viendo es el resultado de una conexión rota , por ejemplo, de alguna manera perdió la conexión con el servidor Redis. node-redisestá tratando con uno de dos escenarios (o ambos): la conexión ha expirado o los intentos de reconexión han excedido el número máximo especificado en una configuración. Verificaría su información de conexión y cómo está configurado su servidor redis.

Veo que está utilizando TLS, puede que le resulte útil: Securing Node Redis

Si desea autenticar el cliente node-redis con un usuario diferente, cuando use Redis 6, tendrá que usar send_command, pero antes debe eliminar el AUTHcomando actual , ya que actualmente node-redis no admite el nuevo comando AUTH <username> <password>.

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