Conexión a redis administrado con nombre de usuario / contraseña de autenticación nodejs
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
El AUTH
comando, 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 default
deberí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-redis
está 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 AUTH
comando 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);