Connexion à Redis géré avec un nom d'utilisateur / mot de passe d'authentification nodejs

Aug 15 2020

Edit: Après avoir réfléchi au problème, la vraie question est de savoir quel est un exemple de connexion aux redis gérés de digitalocean avec node-redis en utilisant tls?

Je suis capable de me connecter très bien avec le client GUI redisinsight en utilisant le nom d'utilisateur / mot de passe, mais je ne peux pas me connecter avec nodejs. C'est sur le même ordinateur donc pas de problèmes de pare-feu.

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

Une chose dont je ne sais pas, c'est où entrer le nom d'utilisateur? C'est juste 'default' mais la documentation de node_redis ne fournit pas un moyen de donner un nom d'utilisateur lors de l'authentification.

L'erreur est: AbortError: Redis connection lost and command aborted. It might have been processed.

Voici mon écran de connexion redisinsight légèrement anonymisé.

Comment faire la même chose dans node-redis?

Réponses

2 LeoMurillo Aug 16 2020 at 07:36

La AUTHcommande, comme indiqué dans la documentation :

Lorsque des ACL sont utilisées, la forme d'argument unique de la commande, où seul le mot de passe est spécifié, suppose que le nom d'utilisateur implicite est "par défaut".

Ainsi, même si vous utilisez Redis 6, où des utilisateurs supplémentaires sont pris en charge, votre authentification pour defaultdevrait fonctionner.

L'erreur que vous voyez est le résultat d'une connexion interrompue , par exemple vous avez perdu la connexion avec le serveur Redis. node-redistraite de l'un des deux scénarios (ou des deux) - la connexion a expiré ou les tentatives de reconnexion ont dépassé le nombre maximum spécifié dans une configuration. Je revérifierais vos informations de connexion et comment votre serveur redis est configuré.

Je vois que vous utilisez TLS, cela peut vous être utile: Sécurisation de Node Redis

Si vous souhaitez authentifier le client node-redis avec un autre utilisateur, lorsque vous utilisez Redis 6, vous devrez utiliser send_command, mais avant de supprimer la AUTHcommande actuelle , car actuellement node-redis ne prend pas en charge la nouvelle commande AUTH <username> <password>.

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