Łączenie się z zarządzanym Redis z uwierzytelniającą nazwą użytkownika / hasłem nodejs
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
AUTH
Poleceń, 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 default
powinno 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-redis
ma 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 AUTH
polecenie, ponieważ obecnie node-redis nie obsługuje nowego polecenia AUTH <username> <password>
.
client['auth'] = null;
client.send_command('AUTH', ['<username>', '<password>'], redis.print);