Conectando-se ao redis gerenciado com o nome de usuário / senha auth nodejs

Aug 15 2020

Edit: Depois de pensar sobre o problema, a verdadeira questão é: qual é um exemplo de conexão com o redis gerenciado do digitalocean com o node-redis usando tls?

Consigo me conectar perfeitamente com o cliente GUI do redisinsight usando nome de usuário / senha, mas não consigo me conectar com nodejs. Está no mesmo computador, sem 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')
});

Uma coisa que estou confuso é onde inserir o nome de usuário. É apenas 'padrão', mas a documentação para node_redis não fornece uma maneira de fornecer um nome de usuário durante a autenticação.

O erro é: AbortError: Redis connection lost and command aborted. It might have been processed.

Esta é a minha tela de conexão redisinsight levemente anônima.

Como faço o mesmo no node-redis?

Respostas

2 LeoMurillo Aug 16 2020 at 07:36

O AUTHcomando, conforme declarado nos documentos :

Quando ACLs são usados, a forma de argumento único do comando, onde apenas a senha é especificada, assume que o nome de usuário implícito é "padrão".

Portanto, mesmo se você estiver usando o Redis 6, onde usuários adicionais são suportados, sua autenticação para defaultdeve funcionar.

O erro que você está vendo é o resultado de uma conexão interrompida , por exemplo, você perdeu a conexão com o servidor Redis. node-redisestá lidando com um de dois cenários (ou ambos) - o tempo limite da conexão expirou ou as tentativas de reconexão excederam o número máximo especificado em uma configuração. Gostaria de verificar suas informações de conexão e como o servidor redis está configurado.

Vejo que você está usando TLS, mas isso pode ser útil: Protegendo o Node Redis

Se você quiser autenticar o cliente node-redis com um usuário diferente, ao usar o Redis 6, você terá que usar send_command, mas antes de remover o AUTHcomando atual , já que atualmente o node-redis não suporta o novo comando AUTH <username> <password>.

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