Łączenie się z zarządzanym Redis z uwierzytelniającą nazwą użytkownika / hasłem nodejs

Aug 15 2020

Edycja: Po przemyśleniu problemu, prawdziwe pytanie brzmi: jaki jest przykład połączenia z zarządzanym redis digitalocean z node-redis przy użyciu TLS?

Jestem w stanie połączyć się dobrze z klientem GUI redisinsight przy użyciu nazwy użytkownika / hasła, ale nie mogę połączyć się z nodejs. Jest na tym samym komputerze, więc nie ma problemów z zaporą.

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

Nie mam pojęcia, gdzie wpisać nazwę użytkownika? Jest to po prostu „domyślne”, ale dokumentacja node_redis nie zapewnia sposobu na podanie nazwy użytkownika podczas uwierzytelniania.

Błąd: AbortError: Redis connection lost and command aborted. It might have been processed.

Oto mój działający lekko anonimowy ekran połączenia ponownego wglądu.

Jak zrobić to samo w Node-Redis?

Odpowiedzi

2 LeoMurillo Aug 16 2020 at 07:36

AUTHPoleceń, jak stwierdzono w docs :

Gdy używane są listy ACL, forma pojedynczego argumentu polecenia, w której określono tylko hasło, zakłada, że ​​niejawna nazwa użytkownika to „default”.

Więc nawet jeśli używasz Redis 6, w którym obsługiwani są dodatkowi użytkownicy, Twoje uwierzytelnianie defaultpowinno działać.

Błąd, który widzisz, jest wynikiem zerwania połączenia , np. W jakiś sposób utraciłeś połączenie z serwerem Redis. node-redisma do czynienia z jednym z dwóch scenariuszy (lub obu) - upłynął limit czasu połączenia lub liczba prób ponownego połączenia przekroczyła maksymalną liczbę określoną w konfiguracji. Dokładnie sprawdzę informacje o połączeniu i konfigurację serwera redis.

Widzę, że używasz TLS, może ci się przydać: Zabezpieczanie Node Redis

Jeśli chcesz uwierzytelnić klienta node-redis z innym użytkownikiem, podczas korzystania z Redis 6 będziesz musiał użyć send_command, ale zanim będziesz musiał usunąć bieżące AUTHpolecenie, ponieważ obecnie node-redis nie obsługuje nowego polecenia AUTH <username> <password>.

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